我遇到同样的问题:Rails Polymorphic Association with multiple associations on the same model
但是这个问题的解决方案对我不起作用。我有一个图片模型和一个事件模型。活动有很多图片和一张封面图片。这是两个模型。
class Picture < ActiveRecord::Base
belongs_to :image, polymorphic: true
end
class Event < ActiveRecord::Base
has_many :pictures, as: :image, :dependent => :destroy
has_one :cover_picture, -> { where image_type: "CoverPicture"},
class_name: Picture, foreign_key: :image_id,
foreign_type: :image_type, dependent: :destroy
end
这里的问题是,当我创建一个新图片并将其设置为事件的cover_picture时,它不会将image_type设置为“CoverPicture”。当我在专门将image_type设置为“CoverPicture”后尝试保存它时,它会出错“NameError:uninitialized constant CoverPicture”
答案 0 :(得分:1)
image_type
在此多态关联中具有特定功能...它标识关联模型(就像image_id
标识id)。
您不应该更改image_type
,因为这会破坏关联。
在图片模型中创建一个新的布尔列,比如cover_picture
,你可以做...
has_one :cover_picture, -> {where cover_picture: true} ...
这样做的好处是你的封面图片也包含在你的图片协会中,但如果你想要从has_many中排除那张图片那么你也可以在那里应用where子句...
has_many :pictures, -> {where.not cover_picture: true} ...