2

ルートの簡単な言語翻訳をしようとしていますが、なぜ私のアプローチが機能しないのか本当に理解できません。www.example.com/it/camere電話rooms_path(locale: :it)www.example.com/en/rooms電話で取得したいのですがrooms_path(locale: :en)
たとえば、次のルートを見てください。

get ":locale/rooms" => "home#rooms", constraints: { locale: "en" }, as: "rooms"
get ":locale/camere" => "home#rooms", as: "rooms"

次の結果が得られます。

app.rooms_path               # => error         OK
app.rooms_path(locale: "it") # => 'it/camere'   OK
app.rooms_path(locale: "en") # => 'en/camere'   Why?!?

そして、次のルートを使用します(2番目の制約に注意してください)。

get ":locale/rooms" => "home#rooms", constraints: { locale: "en" }, as: "rooms"
get ":locale/camere" => "home#rooms", constraints: { locale: "it" }, as: "rooms"

次の結果が得られます。

app.rooms_path               # => error         OK
app.rooms_path(locale: "it") # => 'it/camere'   OK
app.rooms_path(locale: "en") # => error         Lol?!? This is weird!

なぜこれが起こっているのか誰かが私に説明できますか?
ルーティングに関するRailsの記事をすでに約3回読んだことがありますが、役に立ちませんでした。

PS私は学ぶためにプラグインを使用したくないです:)

編集:

これは、レーキルートを呼び出すことで得られるものです。

rooms GET    /:locale/rooms(.:format)    home#rooms {:locale=>"en"}
rooms GET    /:locale/camere(.:format)   home#rooms {:locale=>"it"}
root         /(:locale)(.:format)        home#index
4

1 に答える 1

0

最初のケースについて

:as同じ名前で2回使用することはできません。xxx_path2回目に使用すると、前の定義が置き換えられ、制約なしrooms_pathでを指すものになります。:locale/camereRailsの魔法を過大評価しているようです。

2番目のケースについて

get ":locale/camere" => "home#rooms", constraints: { locale: "it" }, as: "rooms"

使用可能なのは1つだけであり、使用可能であると想定しているapp.rooms_path(locale: "en")ため、呼び出しに失敗します。でそれを呼び出すと、当然、未解決のルートの不満につながります。rooms_path:locale"it""en"

ソースを確認したい場合は、define_url_helperを参照してください。

于 2012-07-25T18:44:56.690 に答える