如何在Rails中正确避免嵌套路由超过1级

时间:2014-08-08 18:13:00

标签: 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级深度嵌套的效果吗?我假设它只是工作/房间/身份证的绝对路径,而不是客户/工作/房间/身份证 - 但我不知道这是否正确。
  3. 任何进一步的教育将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 是的,你做对了。您可以嵌套资源,也可以不嵌套。

  2. 通常嵌套一个级别"强制"你找到每个资源。

  3. 考虑以下路线:

    resources :customers do
      resources :jobs do
        resources :rooms
      end
    end
    

    然后你会有像/customers/1/jobs/2/rooms/3/show这样的相对路径。这意味着3号房间属于属于客户#1的工作#2。

    换句话说,您最终会得到show的{​​{1}}行动,包含3个实例:RoomsController@customer@job,所有< strong>由SQL查询设置。

    但您已经定义@room属于roomjob属于job。那么你真的必须运行3个SQL查询吗?不,这就是为什么你要避免深度嵌套的路由(超过2~3级)。