- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个很常见的嵌套路由案例,我觉得它看起来像这样(在某种伪符号中):
'/:username/photos' => Show photos for User.find_by_username
'/photos' => Show photos for User.all
简而言之:我有用户。他们有照片。我希望能够在他们的页面上显示他们的照片。我还希望能够显示所有照片,而不管用户是谁。我想保持我的路由 RESTful 并使用内置的 resource
方法感觉是正确的方法。
选项 1 这样做是让 PhotosController#index 使用条件来检查给定的参数并获取照片列表并设置 View (用户的照片与所有照片不同).路由它甚至很容易:
resources :photos, :only => [:index]
scope ':/username' do
resources :photos
end
繁荣。 似乎 Rails 就是为此而设置的。但是,在路线之后,事情变得更加复杂。 PhotosController#index 操作中的条件变得越来越臃肿,并且正在做大量的删除。随着应用程序的增长以及我想要显示照片的方式的增加,情况只会变得更糟。
选项 2 可能有一个 User::PhotosController 来处理用户照片,还有一个 PhotosController 来处理显示所有照片。
resources :photos, :only => [:index]
namespace :user, :path => '/:username' do
resources :photos
end
生成以下路由:
photos GET /photos(.:format) {:action=>"index", :controller=>"photos"}
user_photos GET /:username/photos(.:format) {:action=>"index", :controller=>"user/photos"}
POST /:username/photos(.:format) {:action=>"create", :controller=>"user/photos"}
new_user_photo GET /:username/photos/new(.:format) {:action=>"new", :controller=>"user/photos"}
edit_user_photo GET /:username/photos/:id/edit(.:format) {:action=>"edit", :controller=>"user/photos"}
user_photo GET /:username/photos/:id(.:format) {:action=>"show", :controller=>"user/photos"}
PUT /:username/photos/:id(.:format) {:action=>"update", :controller=>"user/photos"}
DELETE /:username/photos/:id(.:format) {:action=>"destroy", :controller=>"user/photos"}
我认为这工作得很好,但一切都在用户模块下,我觉得当我将它与其他东西集成时可能最终会导致问题。
更新:我已经继续实现选项 2,因为允许 Rails 的逻辑工作而不是覆盖它感觉更清晰。到目前为止一切顺利,但我还需要将我的命名空间重命名为 :users
并添加 :as => :user
以免它与我的 User
发生冲突模型。我还覆盖了 to_param
User
上的方法返回用户名的模型。路径助手也仍然以这种方式工作。
我仍然希望收到有关此方法的反馈。我是按照预期的方式做事,还是在滥用此功能?
最佳答案
在这种情况下,您是否考虑过使用浅嵌套路由?
浅层路由嵌套有时,嵌套资源会产生繁琐的 URL。一个解决方案就是使用浅路由嵌套:
resources :products, :shallow => true do
resources :reviews
end
这将启用对以下路线的识别:
/products/1 => product_path(1)
/products/1/reviews => product_reviews_index_path(1)
/reviews/2 => reviews_path(2)
关于ruby-on-rails - 在 Rails 3 中路由嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025050/
我是一名优秀的程序员,十分优秀!