所以我的 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
在这种情况下, A 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
我一点也不知道这意味着什么或为什么会发生。任何人有任何见解?
谢谢!