3

我看到一个场景,一旦我进入可安装的应用程序,我的语言环境参数就会被复制。我的应用看起来像这样:

#routes.rb

resources :blogs

scope "(:locale)" do
  mount Auth::Engine => '/auth'
end

如果我在博客页面并查看身份验证链接,它看起来像这样/en-us/auth/signout,效果很好,但是一旦我加载到可安装应用程序呈现的任何页面,例如个人资料页面/en-us/auth/myprofile',退出链接现在看起来像/en-us/auth/signout?locale=en-us

我不希望查询字符串变得混乱,是什么导致应用程序正确设置语言环境参数,然后在查询字符串中复制它?

4

2 回答 2

1

我敢打赌,您的应用程序控制器具有以下内容:

def set_locale
  # code here
end

def default_url_options
  # code here
end

由于您的引擎控制器继承自应用程序控制器,因此 set_locale 可能会被触发两次。

可能的解决方案:检查代码是否在引擎中,然后不要触发语言环境设置。

这可以通过以下方式完成:self.controller_path().split("/").first == engine_name

于 2012-05-06T03:10:19.653 回答
1

我有同样的问题。我在控制器上设置了默认的 url 选项(通过重新定义default_url_options或使用self.default_url_options=)。

解决方案是Rails.application.routes.default_url_options =改用。

于 2012-06-26T15:27:44.820 回答