Rails 3:将资源路由到另一个名称

时间:2010-09-09 08:38:48

标签: routing ruby-on-rails-3

我有一个模型的CRUD控制器。

执行resources :foo允许我在/foo/:id等路由上进行呼叫操作。

我想为另一种语言添加“foo”翻译路线。我们来说'toto'。 所以我希望所有/toto/:id等路线的行为与/foo/:id等路线完全相同。

我怎么能实现这个目标?

4 个答案:

答案 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

From the Ruby on Rails Guides

答案 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参数传递。

这样:

  • EN_US /富
  • de_DE这个/富
  • ja_JP / foo

所有都由bar_controller处理,使用正常的资源映射,你可以在控制器中免费获得params [:language]。