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 が 2 回トリガーされる可能性があります。

考えられる解決策: コードがエンジン内にあるかどうかを確認してから、ロケール設定をトリガーしないでください。

これは次の方法で実行できます。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 に答える