0

我有一个现有的关系

Artwork has_many :photosPhoto belongs_to :artwork

我一直在尝试将这些关系更改为:

Artwork has_many :photos, as: :attached_photoPhoto belongs_to :attached_photo, polymorphic: true

我正在从 Artwork 表单中创建 Photo 对象,但它们不是嵌套资源。

型号如下:

class Artwork < ActiveRecord::Base
  attr_accessible :photos_attributes
  has_many :photos, as: attached_photo
  accepts_nested_attributes_for :photos, allow_destroy: true
end

class Photo < ActiveRecord::Base
  attr_accessible :photo, :artwork_id, :attached_photo_id, :attached_photo_type
  belongs_to :attached_photo, polymorphic: true
  has_attached_file :photo,
                    path: ":rails_root/assets/:class/:id_partition/:style/:basename.:extension",
                    url: "/:class/:id/:style/:basename.:extension"
end

出于测试目的,我在 Photo 模型中留下了单一关系和多态关系字段。我已经填写了数据库中的两组字段,因此它们应该指向相同的资源。

当我用多态关联所需的版本替换两个模型之间的关系时,我的视图中的所有图像都停止显示。我显示照片的查看代码是

<%= image_tag(@artwork.photos.first.photo.url(:medium)) %>

在关系类型之间进行更改时,添加多态关联后,url 仍然正确显示在页面上,但由于某种原因,图像显示为损坏。在尝试直接浏览到其中一张图片时,我收到的错误消息是:

undefined method `artwork' for #<Photo:0xb3fc2b74>

我无法理解 Photo 模型期望的艺术作品方法来自哪里。谁能为我澄清一下?

4

1 回答 1

0

请参阅此视频了解多态关系 - 这可能对您有所帮助

http://railscasts.com/episodes/154-polymorphic-association

于 2012-11-03T12:01:20.857 回答