私は既存の関係を持っています
Artwork has_many :photos
と Photo belongs_to :artwork
私はこれらの関係を次のように変更しようとしています。
Artwork has_many :photos, as: :attached_photo
とPhoto 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>
写真モデルがアートワークの方法をどこから期待しているのか理解できません。誰かが私に説明を提供できますか?