3

私は最近、I18nでRyan BateのRailscastをフォローして、複数の場所を追加し、URLParamsからロケールを設定しました。

www.example.com/en/
www.example.com/fr/

通常は問題なく機能しますが、URLから場所を手動で削除しようとすると、結果のリダイレクトが正しく形成されず、/が%2Fにエンコードされているように見えます。たとえば、URLをから削除した場合

www.example.com/fr/animals/horses
なので、www.example.com / animal / horses

次に、リダイレクトによって次のURLが生成されます:
www.example.com/fr/animals%2Fhorses

これが私のroutes.rbの一部です

scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
 resources animals
end

match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }
match '', to: redirect("/#{I18n.default_locale}")

CGI :: escapeを{path}に適合させる方法を見つけようとしていましたが、これまで試したことは何もうまくいきませんでした。この問題を解決するための正しいコードを知っている人はいますか?

Rails 3.2.6 / Ruby 1.9.2

ありがとう

4

1 に答える 1

9

あなたがする必要があるのは、ブロックを使用することだと思います:

match '*path', to: redirect {|params| "/bla/#{CGI::unescape(params[:path])}" }

詳細については、ガイドをご覧くださいhttp://guides.rubyonrails.org/routing.html#redirection

于 2012-07-10T18:06:44.450 に答える