Rails多个资源,同一个控制器

时间:2013-03-10 15:13:13

标签: ruby-on-rails routes

在Rails指南中,有以下代码摘录:

scope "admin" do
   resources :photos, :as => "admin_photos"
end
resources :photos

我的问题是,如果它们被路由到同一个控制器,有没有办法区分这两个请求?例如,/ photos和/ admin / photos都会路由到Photos控制器的索引方法,但这些请求怎么能相互区分?

2 个答案:

答案 0 :(得分:1)

您可以使用defaults区分它,如下所示:

scope "admin" do
   resources :photos, :as => "admin_photos", defaults: { area: 'admin' }
end
resources :photos, defaults: { area: 'public' }

您的控制器中将提供params[:area]值。当然,你可以用不同的名称命名。

我认为您可能遇到的问题是form_for @photo将始终适用于普通:photos路线。您必须添加form_for @photo, as: admin_photos(将值放入params[:admin_photos]),或者传递url: admin_photos_path

答案 1 :(得分:0)

我想你不能。无论如何,您可以使用namespace方法并使用不同的控制器来管理命名空间(如果它们相似,您可以从照片控制器继承您的管理控制器)。您可以找到有关namespace方法here

的更多信息