Rails 3:将组和成员建模为层次结构



>Group实例可以包含Person实例或其他Group实例。我想使用 Ancestry gem 来镜像层次结构,但 Ancestry 似乎不适用于两种不同的模型。我不想在PersonModel上使用单表继承,因为它们在概念上是不同的。

对此

需求进行建模的最佳方法是什么?我愿意使用多对多或其他类型的关联来构建自己的层次结构,但我不确定如何使这两个模型(PersonGroup)相互配合。

谢谢。

您可以轻松地在组类上设置层次结构(使用适合您的单模型层次结构的任何层次结构),然后在组和用户之间添加一对多关联:

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整数反映。

相关内容

  • 没有找到相关文章

最新更新