Rails 3本地化路由和展示资源

3

我正在重写我的Rails 3.2服务器上的路由,因此语言是URL的一部分。我的routes.rb文件如下:

scope ":lang", :lang => /es|fr|it|pt|en|de/ do
    resources :users
end

几乎所有的URL都可以通过附加语言字符串来完美工作,例如:
http://mydomain/es/somecontroller/someaction

问题出在展示动作上,链接无法正常工作。这一行:
<%= link_to "Show", @my_user %>

导致“路由错误”出现,例如:
No route matches {:action=>"show", :controller=>"users", :lang=>##User serialization##}

我在做什么错误的事情吗?
编辑:好了,问题解决了。感谢Cage和一点研究找到了解决方法。
只需要在ApplicationController中添加以下方法即可:
def self.default_url_options
  { :lang => FastGettext.locale }
end

一切都运行得非常顺畅!!根本不需要重新编写链接。


更正:所有带有:id的链接都无法工作,例如编辑和删除。只有新建和索引可以工作。 - Rubén T.F.
1个回答

1

对于展示、编辑和删除操作,您应该在路径中传递对象的:id,否则会显示错误。例如:

 <%= link_to "Show", user_path(@my_user.id) %>

点击此链接,它将在路由方面为您提供很大的帮助 http://guides.rubyonrails.org/routing.html


然后在 user_path 中尝试传递您想要使用的语言。 - abhas
这个可以用,再次感谢,但需要更改整个站点上的100多个链接,真的没有其他方法吗?有没有更自动化的方式?也许可以重新定义link_to函数? - Rubén T.F.
很抱歉,我不知道其他的方法。 - abhas
这个解决方案在form_for上也存在问题,所以比我想象的更加复杂... - Rubén T.F.
它会给出几乎相同的错误,当我以不同的方式设置表单时,它不会出现错误,但会破坏提交按钮。 - Rubén T.F.
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接