关于多态关联的问题

时间:2010-12-17 11:32:32

标签: ruby-on-rails

例如,我有2个模型DrummerVideo

如果我使用一对多关联drummer has_many videosvideo belongs_to drummer

所以我可以在双方使用该方法:video.drummersdrummer.videos

但是当我使用多态关联时,我认为这是正确的,因为,会有很多模型有视频,这有意义使视频模型具有多态性

我可以使用drummer.videos, 但我不知道如何让视频属于哪个鼓手

video.drummer不起作用,

任何人都可以告诉我如何做到这一点,以及我在设置关联后可以使用的其他方法。

由于

1 个答案:

答案 0 :(得分:0)

首先,您需要添加迁移文件以在视频中添加列:

class AddPolymorphicReferenceToVideos < ActiveRecord::Migration
  def self.up
    add_column :videos, :video_holder_id, :integer
    add_column :videos, :video_holder_type, :string
    add_index :videos, :video_holder_id
    add_index :videos, :video_holder_type
  end

  def self.down
    # just remove indexes and columns above
  end
end

然后,您可以在Video模型中添加多态关联:

class Video < ActiveRecord::Base
  belongs_to :video_holder, :polymorphic => true
end

然后改变你的Drummer

class Drummer < ActiveRecord::Base
  has_many :videos, :as => :video_holder
end

现在您可以使用多态关联:

drummer.videos  # => an videos array
video.video_holder  # => a model holds the video