Rails的多种资源,同一个控制器
问题描述:
在Rails的指南,有此摘录的代码:Rails的多种资源,同一个控制器
scope "admin" do
resources :photos, :as => "admin_photos"
end
resources :photos
我的问题是,有没有什么办法在这两个请求之间进行区分,如果他们被路由到相同的控制器?例如,/ photos和/ admin/photos都会路由到Photos控制器的索引方法,但这些请求怎么能够彼此区分呢?
答
我认为你不能。无论如何,您可以使用namespace
方法,并为admin命名空间使用不同的控制器(如果它们相似,您可以从照片控制器继承您的管理控制器)。您可以找到有关namespace
方法here
答
您可以使用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
。
使用命名空间结束 - 谢谢 – 2013-03-13 22:06:55