使用多态的第一种方式:
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 端
我没有在控制台中尝试它们,但我认为两者都可以正常工作。但我不知道区别?
答案 0 :(得分:1)
我认为你必须使用多态方法,因为模型不能属于(一对一关联)多个其他模型。有关详细信息,请参阅此导轨指南:http://guides.rubyonrails.org/association_basics.html
答案 1 :(得分:0)
这取决于数据库中的列。如果您有videoable_type
和videoable_id
,那么您正在进行多态性。在这种情况下,在videoable
的实例上调用Video
可以返回任何内容,它与鼓手或cy钹无关。如果是drummer_id
和cymbal_id
则是您描述的后一版本。