am-*_*ils 5 architecture database-design ruby-on-rails ruby-on-rails-3
rails应用程序包含许多不同的内容页面.页面被组织成称为章节的小组:
class Page < ActiveRecord::Base
   attr_accessible: section_id #etc..
   belongs_to :section
end
class Section < ActiveRecord::Base
  attr_accessible :title #, etc... 
  has_many :pages
end
部分也需要组织,但最好的方法是什么 - 重用部分本身,或创建一个新的单元模型?
选项1  - 重复使用部分
 
允许部分具有子部分和父部分.这样,您不需要创建具有与Section类似的字段的另一个模型.有些部分会有很多页面,而其他部分则有很多子部分:
class Section < ActiveRecord::Base
  attr_accessible :parent_id  :title # etc... 
  has_many :pages
  belongs_to :parent, class_name: "Section"
  has_many :children, class_name: "Section", foreign_key: "parent_id"
end
选项2  - 新单元模型
 
创建另一个名为Unit的模型来组织这些部分.它将有许多类似的字段,但它将是一个明显独立的实体.
class Section < ActiveRecord::Base
  attr_accessible :title, :unit_id # etc... 
  has_many :pages
  belongs_to :units
end
class Unit < ActiveRecord::Base
  attr_accessible :title # etc... 
  has_many :sections
end
方案1的优点是避免了一些重复,如果需要更多级别,可以在将来进行调整.但是,选项2清楚地区分了具有多个页面的章节的角色,其中包括具有多个章节的单元,这可以帮助保持其他代码清晰.哪种方法最好?
更新
 
似乎选项2会有更清晰的代码,例如在浏览所有章节时.是否值得重新使用Sections,如果它会使一些代码更复杂?例如,以下是如何以有条理的方式列出所有部分:
选项2 - 对于每个单元,列出所有子部分.然后列出任何不在任何单位的章节.
选项1 - 对于每个父节,列出所有子节.然后列出任何没有父节或子节的节.
| 归档时间: | 
 | 
| 查看次数: | 1223 次 | 
| 最近记录: |