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

Routing Rails 3:将资源路由到另一个名称,routing,ruby-on-rails-3,Routing,Ruby On Rails 3,我有一个模型的积垢控制器 执行resources:foo允许我在/foo/:id等路径上调用操作 我想为“foo”在另一种语言中的翻译添加一个路径。让我们说“toto”。 所以我希望所有的/toto/:id等路由都能像/foo/:id等路由一样工作 如何实现这一点?您可以添加一个新资源并指定foo作为控制器: resources :toto, :controller=>"foo" 这会将所有操作指向“foo”,但有一个问题。我想如果你使用foo_url或类似的东西,你会遇到页面链接的问题

我有一个模型的积垢控制器

执行
resources:foo
允许我在
/foo/:id
等路径上调用操作

我想为“foo”在另一种语言中的翻译添加一个路径。让我们说“toto”。 所以我希望所有的
/toto/:id
等路由都能像
/foo/:id
等路由一样工作


如何实现这一点?

您可以添加一个新资源并指定foo作为控制器:

resources :toto, :controller=>"foo"

这会将所有操作指向“foo”,但有一个问题。我想如果你使用foo_url或类似的东西,你会遇到页面链接的问题。因此,您必须找到一种基于“request.path”中的控制器动态创建URL的方法。

这将允许您重命名用户看到的路径,但在代码中保留控制器的原始名称:

scope(:path_names => { :new => "neu", :edit => "bearbeiten" }) do
  resources :categories, :path => "kategorien"
end

您可以使用以下范围实现接近此范围的目标:

scope ':language/' do
  resources :foo, controller: 'bar_controller'
end
这将使您的bar_控制器成为anything/foo的资源,其中anything作为:language参数传递

因此:

  • 恩努斯/富
  • 德乌德福
  • ja_JP/foo

所有这些都由bar_控制器通过正常资源映射进行处理,并且您可以在控制器中免费获得参数[:language]。

如果我理解正确,您只需要使用另一个路径

resources :foo, path: 'toto'
现在您将拥有:

GET /toto          foo#index
GET /toto/:id      foo#show
...

关于如何从
views/toto
而不是
views/foo
加载视图,有什么想法吗?
resources:toto,:controller=>“foo”,:path=>“toto”