Rails:资源可以从两条路线到达,还是更好的方法?
我正在开发一个用户可以分享照片的应用。 照片可以选择属于集合,但不必。
目前,用户可以通过以下方式查看所有照片: photos/id
。 我认为如果他们可以通过collections/id/photos
浏览特定馆藏的照片也是有意义的
因此,这意味着照片既是顶级资源又是嵌套资源。 我想我可以在这样的路线中设置它:
resources :photos resources :collections do resources :photos end
这是一个好主意,还是有更好的方法来重用照片模型,同时还允许它在适当时作为嵌套在集合中? 我非常感谢关于处理这种情况的“轨道方式”的建议。
谢谢!
你建议的路线非常好。 但是,您需要注意您的照片控制器操作。 因为可以为单个照片或集合调用它们,所以您需要根据可用的参数有条件地查找照片。
另外,我建议更具体地说明每条路线可以采取哪些措施:
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.