2

したがって、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

これが何を意味するのか、なぜそれが起こっているのか、私にはかすかな手掛かりがありません。誰にも洞察がありますか?

ありがとう!

4

1 に答える 1