2
그래서 레일즈 4 앱에는 이미지 업로드가 가능한 몇 가지 모델이 있습니다. 각 모델에 동일한 코드를 추가하는 대신 모든 모듈에 포함시킬 수있는 모듈을 만들었습니다.레일 4 ActiveSupport가 포함 된 ActiveRecord 모듈
여기는이 경우
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 : 사진입니다. after_save
여기 좋은 작품, 그래서 여기
class PurchaseType < ActiveRecord::Base
include WithImage
validates_presence_of :name, :type, :price
end
건입니다 :
여기 내 PurchaseType 모델 (즉,이 믹스 인을 사용)입니다. 나는 희미한 단서 이것이 의미 또는 무엇을 왜 일어나고하지 않은
ActiveRecord::ActiveRecordError: ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord
: 내가 콘솔로 이동 PurchaseType.last.photo_url
을 할 때, 나는 다음과 같은 오류가 발생합니다. 누구나 통찰력이 있습니까?
감사합니다.
필자는이 파일을 lib/with_image.rb에 넣었으며 제대로 포함 시켰음을 언급해야합니다. – goddamnyouryan
'WithImage' 모듈에'class ActiveRecord :: Base' 원숭이 패치가 잘못되었다고 생각합니다. 왜 그렇게 필요한거야? –
@muistooshort 맞습니다. 나는 그것을 이해하고 아래에 답변을 추가했습니다. – goddamnyouryan