Rails 4:我可以在另一个浅层资源中深度嵌套浅层资源吗?

时间:2015-09-04 17:07:08

标签: ruby-on-rails ruby-on-rails-4 model-view-controller routes nested-resources

在我的Rails 4应用程序中,有五种型号:

class User < ActiveRecord::Base
  has_many :administrations
  has_many :calendars, through: :administrations
end

class Calendar < ActiveRecord::Base
  has_many :administrations
  has_many :users, through: :administrations
  has_many :posts
end

class Administration < ActiveRecord::Base
  belongs_to :user
  belongs_to :calendar
end

class Post < ActiveRecord::Base
  belongs_to :calendar
end

class Comment < ActiveRecord::Base
  belongs_to :post
  belongs_to :user
end

目前,我的资源构建如下:

Rails.application.routes.draw do

  root to: 'pages#home'

  devise_for :users, :path => 'account'

  resources :calendars do
    resources :posts, shallow: true
  end

end

现在,我需要将comments资源添加到路由文件中,我正在考虑将shallow: true嵌套在posts资源中,该资源已经是一个浅层资源,如下所示:

Rails.application.routes.draw do

  root to: 'pages#home'

  devise_for :users, :path => 'account'

  resources :calendars do
    resources :posts, shallow: true do
      resources :comments, shallow: true
    end
  end

end

我认为这在技术上是可行的,但我不确定这会被视为好的还是坏的做法。

特别是因为,根据我在Rails Guides的理解,浅巢的主要目的是避免深度筑巢。

换句话说,有没有技术上的原因我可能会像Rails初学者一样监督这会导致这种做法不好并且在将来会对应用程序的开发造成重大问题?

1 个答案:

答案 0 :(得分:1)

是的,您的嵌套浅层路由可以正常工作。而且,由于深度嵌套的资源很快变得麻烦,因此使用浅路由。所以,如果您作为应用程序开发人员对此没问题,我认为这很好。

Jamis Buck为好的Rails设计提出了一条经验法则:

  

资源不应该嵌套超过1级。

所以,我不认为你在这里监督任何事情。如果那些适合你的话,你可以使用那些浅薄的路线。