0

私は既存の関係を持っています

Artwork has_many :photosPhoto belongs_to :artwork

私はこれらの関係を次のように変更しようとしています。

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

アートワークフォーム内から写真オブジェクトを作成していますが、ネストされたリソースではありません。

モデルは次のとおりです。

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

テストの目的で、写真モデルに単一の関係フィールドと多態的な関係フィールドを残しました。データベースの両方のフィールドセットに入力したので、同じリソースを指す必要があります。

2つのモデル間の関係をポリモーフィックな関連付けに必要なバージョンに置き換えると、ビュー内のすべての画像が表示されなくなります。写真を表示するための私のビューコードは

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

リレーションシップタイプ間で変更を行う場合、ポリモーフィックアソシエーションを追加すると、URLはページに正しく表示されますが、何らかの理由で画像が壊れているように表示されます。画像の1つを直接参照しようとすると、次のエラーメッセージが表示されます。

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

写真モデルがアートワークの方法をどこから期待しているのか理解できません。誰かが私に説明を提供できますか?

4

1 に答える 1