したがって、Rails 4 アプリには、画像をアップロードするいくつかの異なるモデルがあります。各モデルに同一のコードを追加するのではなく、すべてのモデルに含めることができるモジュールを作成しました。
ここにあります:
module WithImage
extend ActiveSupport::Concern
included do
attr_accessor :photo
has_one :medium, as: :imageable
after_save :find_or_create_medium, if: :photo?
def photo?
self.photo.present?
end
def find_or_create_medium
medium = Medium.find_or_initialize_by_imageable_id_and_imageable_type(self.id, self.class.to_s)
medium.attachment = photo
medium.save
end
end
def photo_url
medium.attachment if medium.present?
end
end
class ActiveRecord::Base
include WithImage
end
この場合のMedium
(メディアの単数形) は、ペーパークリップが取り付けられたポリモーフィック モデルです。attr_accessor は、さまざまなフォームにある f.file_field :photo です。
私の PurchaseType モデル (この mixin を使用) は次のとおりです。
class PurchaseType < ActiveRecord::Base
include WithImage
validates_presence_of :name, :type, :price
end
これが問題after_save
です。ここで素晴らしい作品です。ただし、コンソールに移動するとPurchaseType.last.photo_url
、次のエラーが表示されます。
ActiveRecord::ActiveRecordError: ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord
これが何を意味するのか、なぜそれが起こっているのか、私にはかすかな手掛かりがありません。誰にも洞察がありますか?
ありがとう!