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

问题描述:

在Rails的指南,有此摘录的代码:Rails的多种资源,同一个控制器

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

我的问题是,有没有什么办法在这两个请求之间进行区分,如果他们被路由到相同的控制器?例如,/ photos和/ admin/photos都会路由到Photos控制器的索引方法,但这些请求怎么能够彼此区分呢?

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

+0

使用命名空间结束 - 谢谢 – 2013-03-13 22:06:55

您可以使用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