Rails Polymorphic Association与同一模型bug上的多个关联

时间:2016-11-29 18:23:11

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.2

我遇到同样的问题: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”

1 个答案:

答案 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} ...