A Group
實例可以包含Person
實例或其他Group
實例。我想使用祖先的寶石來反映一個層次結構,但祖先似乎沒有與兩種不同的模型一起工作。我不想在Person
和Model
上使用單表繼承,因爲它們在概念上是不同的。Rails 3:將模型組和成員建模爲層次結構
什麼是最好的方式去建模這個要求?我願意使用多對多或其他類型的關聯來構建我自己的層次結構,但我不知道如何讓這兩個模型(Person
和Group
)彼此搭配很好。
謝謝。
A Group
實例可以包含Person
實例或其他Group
實例。我想使用祖先的寶石來反映一個層次結構,但祖先似乎沒有與兩種不同的模型一起工作。我不想在Person
和Model
上使用單表繼承,因爲它們在概念上是不同的。Rails 3:將模型組和成員建模爲層次結構
什麼是最好的方式去建模這個要求?我願意使用多對多或其他類型的關聯來構建我自己的層次結構,但我不知道如何讓這兩個模型(Person
和Group
)彼此搭配很好。
謝謝。
您可以輕鬆地設置在集團類層次結構(使用任何適合你的單一模式的層次結構),然後添加組和用戶之間的一個一對多的關聯關係:
class Group < AR::Base
acts_as_tree # or whatever is called in your preferred tree implementation
has_many :users
end
class User < AR::Base
belongs_to :group
end
您將有
@group.children # => a list of groups
@group.parent # => another group or nil if root
@group.users # => the users directly below this group
@user.group # => a group
如果您確實需要該組具有用戶或子組,但不能同時使用,則使用驗證規則。
聽起來像你想要使用多態關聯。見一個簡單的例子導軌導向:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
編輯更新包括層次:
聽起來像是你需要幾個新型號,「水平」和「孩子」,例如:
組型號:
has_many :children, :as => :groupable
belongs_to :level
角色模型:
has_many :children, :as => :groupable
級別型號:
has_many :children
has_one :group
attr_accessible :level (integer)
兒童型號:
belongs_to :groupable, :polymorphic => true
它可能會通過將兒童和層次模型來簡化這一點,但我不知道是否ActiveRecord的可以處理兩個關係在兩張桌子之間(一組爲兒童組,其中一組爲父母,聽起來總是一組)
您的層級將反映在level
級別模型中的整數。
那麼'Group'會包含多態相關的列嗎?此外,我怎樣才能得到一個層次結構呢? – RailinginDFW