如何设置多态has_many:通过?

时间:2012-02-20 13:07:03

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

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

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

但我不确定如何正确地将我的关卡与其他3关联起来。

需要有一个中间模型,将级别与不同的项目连接起来,并设置当前级别。

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

enter image description here

之前我问了一个类似的问题,但却解释了我想要做的事情,这是我的第二次尝试。

1 个答案:

答案 0 :(得分:1)

ItemLevels需要一种类型来了解与之相关的内容:

class ItemLevel < ActiveRecord::Base
    #  levelable_id   :integer
    #  levelable_type :string(255)
    belongs_to :levelable, :polymorphic => true
    has_many :levels
end

class Musician < ActiveRecord::Base
    has_many :levelables
end

class Musician < ActiveRecord::Base
    has_many :levelables
end

class Manager < ActiveRecord::Base
    has_many :levelables
end

等级只需知道与之关联的ItemLevel:

class Level < ActiveRecord::Base
    belongs_to :item_level
end

如果你想要严格,你应该在你的Level模型中加入一些验证来检查它是否有一个ItemLevel和正在实例化的类型。