has_and_belongs_to_many或多态has_many:通过?

时间:2012-02-20 01:53:59

标签: ruby-on-rails model associations polymorphic-associations

我无法找到正确的关联方式。

我有3个模特:音乐家,乐队和经理。每个人都可以有一定的“水平”(压力,快乐等)。

但我不确定如何正确地将我的Levels模型与其他3模式相关联。

我是否需要某种has_many:通过多态?我该如何设置呢?我需要一些其他类型的关联吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

如果您正在定义可以分配给特定模型类的属性,那么您可能希望使用更传统的方法。而不是kind使用类似record_type的内容而是在其上构建范围。

通过这种方式获取它们的方法是在任何实体和此列之间创建一个访问器方法,而不是关系。像这样:

def levels
  Level.for_record_type(self.class)
end

for_record_type是范围:

scope :for_record_type, lambda { |record_type|
  where(:record_type => record_type.to_s)
}

没有将模型与类相关联的惯例,而不是其他模型的实例。

答案 1 :(得分:0)

是的,这将是一个多态关联:

class Level < ActiveRecord::Base
  belongs_to :leveled, :polymorphic => true # maybe there's a better word than "leveled"
end

class Musician < ActiveRecord::Base
  has_many :levels, :as => :leveled
end

您需要在“级别”表格中添加leveled_typeleveled_id