在Rails中翻译路线

时间:2012-07-25 17:59:26

标签: ruby-on-rails routing

我正在尝试为我的路线进行简单的语言翻译,但我真的不明白为什么我的方法不起作用。我希望通过拨打www.example.com/it/camererooms_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?!?

使用以下路线(注意第二个约束):

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倍,但它没有帮助。

谢谢!

P.S。我希望不要使用插件来学习:)

修改

这是我通过调用rake路线得到的:

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

1 个答案:

答案 0 :(得分:0)

关于第一个案例

您不能使用相同名称的:as两次。第二次使用它取代了之前的xxx_path定义,您最终得到的rooms_path指向:locale/camere,没有任何约束。看起来你已经高估了Rails'魔法。

关于第二种情况

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

无法拨打app.rooms_path(locale: "en"),因为只有一个rooms_path可用且预计:locale"it"。用"en"调用它自然会导致一条未解决的路线抱怨。

如果您想查看其来源,请查看define_url_helper