我有一个现有的关系
Artwork has_many :photos
和Photo belongs_to :artwork
我一直试图将这些关系改为:
Artwork has_many :photos, as: :attached_photo
和Photo 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)) %>
在关系类型之间进行更改时,添加多态关联后,网址仍会在页面上正确显示,但由于某种原因,图像显示为已损坏。在尝试直接浏览其中一个图像时,我收到的错误消息是:
undefined method `artwork' for #<Photo:0xb3fc2b74>
我无法理解Photo模型期望艺术品方法的来源。有人可以为我提供澄清吗?
答案 0 :(得分:0)
观看此视频了解多态关系 - 这可能对您有所帮助