在我的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初学者一样监督这会导致这种做法不好并且在将来会对应用程序的开发造成重大问题?
答案 0 :(得分:1)
是的,您的嵌套浅层路由可以正常工作。而且,由于深度嵌套的资源很快变得麻烦,因此使用浅路由。所以,如果您作为应用程序开发人员对此没问题,我认为这很好。
Jamis Buck为好的Rails设计提出了一条经验法则:
资源不应该嵌套超过1级。
所以,我不认为你在这里监督任何事情。如果那些适合你的话,你可以使用那些浅薄的路线。