多态和写几个一对多关联之间的区别是什么

时间:2010-12-11 10:19:54

标签: ruby-on-rails

嘿伙计们, 我是铁杆新手 以下是制作鼓手模型的两种方式,而Cymbal模型都有很多视频

使用多态的第一种方式:

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

class Cymbal < ActiveRecord::Base
  has_many :videos, :as => :videoable
end

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

使用两个1:m关联的第二种方式:

班鼓手&lt;的ActiveRecord :: Base的   has_many:视频 端

类Cymbal&lt;的ActiveRecord :: Base的   has_many:视频, 端

class Video&lt;的ActiveRecord :: Base的   belongs_to:鼓手   belongs_to:cymbal 端

我没有在控制台中尝试它们,但我认为两者都可以正常工作。但我不知道区别?

2 个答案:

答案 0 :(得分:1)

我认为你必须使用多态方法,因为模型不能属于(一对一关联)多个其他模型。有关详细信息,请参阅此导轨指南:http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:0)

这取决于数据库中的列。如果您有videoable_typevideoable_id,那么您正在进行多态性。在这种情况下,在videoable的实例上调用Video可以返回任何内容,它与鼓手或cy钹无关。如果是drummer_idcymbal_id则是您描述的后一版本。