我正在开发一个用户可以分享照片的应用。这些照片可以选择属于一个集合,但不一定属于。
目前,用户可以通过photos/id
查看所有照片。我认为如果他们可以通过collections/id/photos
因此,这意味着照片既是顶级资源又是嵌套资源。我想我可以在这样的路线中设置它:
resources :photos
resources :collections do
resources :photos
end
这是一个好主意,还是有更好的方法来重用照片模型,同时还允许它在适当的时候作为嵌套在集合中?我非常感谢关于处理这种情况的“轨道方式”的建议。
谢谢!
答案 0 :(得分:1)
您建议的路线完美无缺。但是,您需要注意您的照片控制器操作。因为可以为单个照片或集合调用它们,所以您需要根据可用的参数来有条件地查找照片。
另外,我建议更具体地说明每条路线可以采取哪些措施:
resources :photos
resources :collections do
resources :photos, :only => [:index, :create, :destroy]
end
# index => show photos in a collection
# create => add a photo to a collection
# destroy => remove a photo from a collection
您根本不需要根据您提供的信息编辑/更新/显示照片作为集合的成员。
另一个选择是使用命名空间路由:
namespace :collection, :path => '/collection', :as => :collection do
resources :photos, :only => [:index, :create, :destroy]
end
这样你就可以将你的Collection :: Photos与你的照片分开......
controllers/photos_controller.rb
controllers/collections/photos_controller.rb
如果你真的想要,Rails可以让你对你的观点做同样的事情。使用命名空间的另一个好处是它设置了一些非常漂亮的路由助手:
photo_path(@photo) #=> /photos/1
collection_photos_path #=> /collections/1/photos
etc.