我有一个模型的CRUD控制器。
执行resources :foo
允许我在/foo/:id
等路由上进行呼叫操作。
我想为另一种语言添加“foo”翻译路线。我们来说'toto'。
所以我希望所有/toto/:id
等路线的行为与/foo/:id
等路线完全相同。
我怎么能实现这个目标?
答案 0 :(得分:37)
您可以添加新资源并将foo指定为控制器:
resources :toto, :controller=>"foo"
这会将所有动作指向“foo”,但是有一个问题。如果您使用foo_url或类似的东西,我认为您将遇到页面上的链接问题。因此,您必须找到一种基于“request.path”中的控制器以动态方式创建URL的方法。
答案 1 :(得分:23)
这将允许您重命名用户看到的路径,但在代码中保留控制器的原始名称:
scope(:path_names => { :new => "neu", :edit => "bearbeiten" }) do
resources :categories, :path => "kategorien"
end
答案 2 :(得分:4)
如果我理解正确,您只想使用其他路径。
resources :foo, path: 'toto'
现在你将拥有:
GET /toto foo#index
GET /toto/:id foo#show
...
答案 3 :(得分:0)
您可以使用范围实现与此接近的目标:
scope ':language/' do
resources :foo, controller: 'bar_controller'
end
这使你的bar_controller成为任何/ foo的资源,其中任何东西都作为:language参数传递。
这样:
所有都由bar_controller处理,使用正常的资源映射,你可以在控制器中免费获得params [:language]。