一個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,頁面是最小的單位,許多頁面一起組織成部分。 「單位」可能是一個較大的單位,用於保存各個部分,類似於教科書中的單位。 –