一个rails应用程序包含许多不同的页面内容。页被组织成称为节小团体:如何在Ruby on 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类似的字段。部分路段会have_many页面和其他部分将have_many儿童部分:
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 - 新单位模型
创建一个名为单位组织部分另一种模式。它将有许多类似的领域,但它将是一个明显独立的实体。
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 - 对于每个父节,列出所有子节。然后列出没有父节或子节的任何节。
部分是否可以出现在不同的页面上?而一个页面只有一个部分?我会认为这是另一种方式:) Ow等待:你不是呈现页面,一个部分有很多页面,但你的父母/容器会例如成为一本书吗?一本书有很多部分,每部分都有很多页面? – nathanvda
@nathanvda,页面是最小的单位,许多页面一起组织成部分。 “单位”可能是一个较大的单位,用于保存各个部分,类似于教科书中的单位。 –