Rails上的嵌套资源

时间:2014-09-28 03:20:27

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

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

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

正如你所看到的,我在建筑物内部有网络,校园内有建筑物,校园内有统一体。 但是,如果我有,例如:

校园ID:10 Unity ID:20 建筑ID:30 网络ID:40

我的网址将是:     的 /坎皮萨伦蒂/ 10 /统一体/ 20 /建筑物/ 30 /网络/ 40

我希望它像:     的 / 10/20 /四十零分之三十零

我该怎么办?

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

修改 我希望它能像这样工作:

如果我acesse,例如, / 10/20 / buildings ,我将进入团结20内的建筑物集合。它包括crud方法的页面。

1 个答案:

答案 0 :(得分:0)

根据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

我希望你明白这一点。