ruby-on-rails - 如何正确避免 Rails 中嵌套深度超过 1 层的路由

标签 ruby-on-rails routes nested-routes

我很难概念化为此项目设置资源的最佳方法。

这是我当前的路线:

resources :customers do
  resources :jobs
end

resources :jobs
  resources :rooms
  resources :memos
  resources :appliances
  resources :accessories
end

我从这个问题中获取了我的结构:Rails 3 routing: Avoiding Deep Nesting

我的问题如下:

  1. 我这样做对吗?
  2. 如果是,那么这能实现什么嵌套超过 1 层深度不能实现的功能?我假设这只是 jobs/rooms/id 之类的绝对路径,而不是customers/jobs/rooms/id - 但我不知道这是否正确。

任何进一步的教育将不胜感激。谢谢!

最佳答案

  1. 是的,你做得对。您可以嵌套资源,也可以不嵌套资源,这取决于您。

  2. 再嵌套一层通常会“迫使”您查找每个资源。

考虑这些路线:

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 .

换句话说,RoomsControllershow 操作最终会包含 3 个实例:@customer@ job@room,全部由 SQL 查询设置

但是您已经定义了房间属于工作并且工作属于房间 。那么您真的需要运行 3 个 SQL 查询吗?不,这就是为什么您要避免深度嵌套路由(超过 2~3 层)。

关于ruby-on-rails - 如何正确避免 Rails 中嵌套深度超过 1 层的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25209742/

相关文章:

jquery - jQuery ajax post 时出现 SystemStackError(堆栈级别太深)

ruby-on-rails - 在 Rails 5 中向 Postgres 表添加 trigram 索引

algorithm - 在无向未加权图中查找给定长度的路径数

vue.js - 嵌套路由未在路由器 View 中呈现

javascript - 具有主干路由的嵌套 View

ruby-on-rails - 为什么 false 会使 validates_presence_of 无效?

ruby-on-rails - 当有人在我的网站上按下 "liked"按钮时,我如何确保有人成功地 "like"我的网站?

mysql - Laravel - 在 JS/Http 中使用 SQL id 的安全方法

asp.net - 添加属性路由会破坏基于配置的路由 (.NET MVC5)