我很难概念化为此项目设置资源的最佳方法。
这是我当前的路线:
resources :customers do
resources :jobs
end
resources :jobs
resources :rooms
resources :memos
resources :appliances
resources :accessories
end
我从这个问题中获取了我的结构:Rails 3 routing: Avoiding Deep Nesting
我的问题如下:
- 我这样做对吗?
- 如果是,那么这能实现什么嵌套超过 1 层深度不能实现的功能?我假设这只是 jobs/rooms/id 之类的绝对路径,而不是customers/jobs/rooms/id - 但我不知道这是否正确。
任何进一步的教育将不胜感激。谢谢!
最佳答案
是的,你做得对。您可以嵌套资源,也可以不嵌套资源,这取决于您。
再嵌套一层通常会“迫使”您查找每个资源。
考虑这些路线:
resources :customers do
resources :jobs do
resources :rooms
end
end
然后您将拥有类似 /customers/1/jobs/2/rooms/3/show
的相对路径。这意味着 Room #3 属于 Job #2,而 Job #2 又属于 Customer #1 .
换句话说,RoomsController
的 show
操作最终会包含 3 个实例:@customer
、@ job
和 @room
,全部由 SQL 查询设置。
但是您已经定义了房间
属于工作
并且工作
属于房间
。那么您真的需要运行 3 个 SQL 查询吗?不,这就是为什么您要避免深度嵌套路由(超过 2~3 层)。
关于ruby-on-rails - 如何正确避免 Rails 中嵌套深度超过 1 层的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25209742/