gpt4 book ai didi

ruby-on-rails - 在 Rails 3 中路由嵌套资源

转载 作者:数据小太阳 更新时间:2023-10-29 06:24:56 26 4
gpt4 key购买 nike

我有一个很常见的嵌套路由案例,我觉得它看起来像这样(在某种伪符号中):

'/: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com