【问题标题】:Nested resources on RailsRails 上的嵌套资源
【发布时间】:2014-09-28 03:20:26
【问题描述】:

我的routes.rb文件是这样的:

  resources :campi do
    resources :unities do
      resources :buildings do
        resources :networks
      end
    end
  end

如您所见,我在建筑物内有网络,在单位内有建筑物,在校园内有单位。 但是,如果我有,例如:

校园编号:10 统一编号:20 建筑物编号:30 网络 ID:40

我的网址是: /campi/10/unities/20/buildings/30/networks/40

我希望它是这样的: /10/20/30/40

我应该如何进行?

是的,我的模型都是正确的,以适当的方式使用 has_many。

编辑: 我希望它像这样工作:

如果我访问例如 /10/20/buildings,我将访问 unity 20 内的建筑物集合。它包括用于 crud 方法的页面。

【问题讨论】:

  • 您计划如何使用collection 路由和indexnew/10/20/30/40 路由路径?
  • 我更新了问题

标签: ruby-on-rails ruby-on-rails-4 routing routes nested


【解决方案1】:

根据Rails routing from the outside in的最后一段:

深度嵌套的资源很快就会变得很麻烦。在这种情况下,对于 例如,应用程序将识别以下路径:

 /publishers/1/magazines/2/photos/3

对应的路由助手是 publisher_magazine_photo_url, 要求您在所有三个级别上指定对象。的确,这 情况令人困惑,以至于 Jamis Buck 的流行 article 提出了一个好的 Rails 设计的经验法则:

资源的嵌套深度不得超过 1 级。

我建议你想办法避免这种情况。但是,如果您无法避免这种安排,那么您将不得不定义一个命名路由来解决这种情况:

get '/:campi_id/:unity_id/:building_id/:network_id', to: 'networks#show',   as: :network
get '/:campi_id/:unity_id/buildings',                to: 'buildings#index', as: :buildings

希望你能明白。

【讨论】:

  • 由于我开发网站的最初目的只是学习轨道,我想我可以手动分配每个路径。不过,从现在开始,我会尽量不要像本例那样深入嵌套资源。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多