一款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 - 重用章节
允许章节有子章节和父章节。这样,您就不需要创建另一个具有类似字段的模型作为章节。一些章节将具有许多页面,而其他章节将具有许多子章节:
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模型
创建另一个名为Unit的模型来组织章节。它将具有许多与section相似的字段,但它将是一个明确分离的实体。
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会有更清晰的代码,例如当浏览所有章节时。如果重复使用章节会使某些代码变得更加复杂,那么它是否值得?例如,以下是如何以组织方式列出所有章节的方法:
选项2-对于每个单元,列出所有子章节。然后列出任何不属于任何单元的章节。
选项1-对于每个父章节,列出所有子章节。然后列出没有父章节或子章节的任何章节。