多态关联在同一模型上具有多个关联

时间:2009-07-22 20:29:31

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

我对我所获得的多态关联感到有些困惑。我需要一个文章模型来获得标题图像和许多图像,但我希望有一个图像模型。更令人困惑的是,Image模型具有多态性(允许其他资源拥有许多图像)。

我在我的文章模型中使用此关联:

class Article < ActiveRecord::Base
  has_one :header_image, :as => :imageable
  has_many :images, :as => :imageable
end

这可能吗?感谢。

2 个答案:

答案 0 :(得分:7)

我尝试了这个,但随后header_image返回其中一个图片。仅仅因为图像表没有指定不同的图像使用类型(header_image与普通图像)。它只是说:imageable_type =两种用途的图像。因此,如果没有存储有关使用类型的信息,则ActiveRecord无法区分。

答案 1 :(得分:4)

是的。这完全有可能。

您可能需要指定header_image的类名,因为无法推断。也包括:dependent => :destroy,以确保在删除文章时销毁图像

class Article < ActiveRecord::Base
  has_one :header_image, :as => :imageable, :class_name => 'Image', :dependent => :destroy
  has_many :images, :as => :imageable, :dependent => :destroy
end

然后在另一端......

class Image < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end