Я установил свои модели для использования полиморфной модели изображения. Это прекрасно работает, однако мне интересно, можно ли изменить настройку стилей для каждой модели. Нашли несколько примеров, используя STI (Model < Image). Однако это не вариант для меня, потому что я использую отношение has_many.
Искусство
has_many :images, :as => :imageable
Изображение
belongs_to :imageable, :polymorphic => true
has_attached_file :file, :styles => { :thumb => "150x150>", :normal => "492x600>"}
#Change this setting depending on model
UPDATE
Я попытался запустить отладчик внутри метода Proc. Заполняются только поля, связанные с вложенным файлом:
run'irb(Image):006:0> a.instance => #<Image id: nil, created_at: nil, updated_at: nil, imageable_id: nil, imageable_type: nil, file_file_name: "IMG_9834.JPG", file_content_type: "image/jpeg", file_file_size: 151326, file_updated_at: "2010-10-30 08:40:23">
Это объект из ImageController # create
ImageController#create
@image => #<Image id: nil, created_at: nil, updated_at: nil, imageable_id: 83, imageable_type: "Art", file_file_name: "IMG_9834.JPG", file_content_type: "image/jpeg", file_file_size: 151326, file_updated_at: "2010-10-30 08:32:49">
Я использую paperclip (2.3.5) и Rails 3.0.1. Независимо от того, что я делаю, объект a.instance - это изображение с полями, связанными с включенным вложением. Любые идеи?
UPDATE2
Прочитав много на форуме Paperclip, я не считаю возможным доступ к экземпляру до его сохранения. Вы можете видеть только материал скрепки и что это.
Я столкнулся с этой проблемой, предварительно создав изображение с контроллера Image с фильтром до фильтра - без вложения
before_filter :presave_image, :only => :create
...
private
def presave_image
if @image.id.nil? # Save if new record / Arts controller sets @image
@image = Image.new(:imageable_type => params[:image][:imageable_type], :imageable_id => params[:image][:imageable_id])
@image.save(:validate => false)
@image.file = params[:file] # Set to params[:image][:file] if you edit an image.
end
end