Group
实例可以包含 Person
实例或其他 Group
实例。我想使用 Ancestry gem 来镜像层次结构,但 Ancestry 似乎不适用于两种不同的模型。我不想在 Person
和 Model
上使用单表继承,因为它们在概念上是不同的。
对此需求进行建模的最佳方法是什么?我愿意使用多对多或其他类型的关联来构建自己的层次结构,但我不确定如何创建两个模型(Person
和 Group
)彼此相处融洽。
谢谢。
最佳答案
您可以轻松地在 Group 类上设置层次结构(使用适合您的单模型层次结构的任何内容),然后在 Groups 和 Users 之间添加一对多关联:
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
如果您确实需要组拥有用户或子组,但不能同时拥有两者,请使用验证规则。
关于ruby-on-rails - rails 3 : Modeling groups and members as a hierarchy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924416/