命名空间时,如何使两个rails路由转到同一个控制器?

时间:2014-09-18 14:16:56

标签: ruby-on-rails ruby routing

目的是创建以下两个网址:

其中"帖子"是资源,"小部件"不是(它只是客户想要的URL)

我希望这两条路线都转到SAME控制器。

我在routes.rb中有这样的设置:

 namespace :widgets do
   get :edit
 end

 resources :posts do
   namespace :widgets do
     get :edit, to: "widgets#edit"
   end
 end

快速rake routes / grep显示这些转到两个单独的控制器:

 rake routes | grep widgets
 /widgets/edit(.:format)                widgets#edit
 /posts/:post_id/widgets/edit(.:format) widgets/widgets#edit

我有两个我想要的网址,但第二个是去另一个控制器!我尝试了一大堆不同的配置而没有运气 - 我怎么会破坏那些额外的"小部件"第二条路线中的命名空间没有放弃客户想要的URL吗?

我正在使用rails 3.2,因此"关注"出局。现在升级不是一个选项。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我会将该路由与嵌套在资源路由块之上。

获取“posts /:post_id / widgets / edit”=> '部件#修改'。

您的嵌套命名空间正在添加小部件slug,您所需的操作也在添加模型slug。