Я настроил свои модели на использование полиморфной модели изображений.Это работает нормально, однако мне интересно, можно ли изменить настройку: styles для каждой модели.Нашел несколько примеров использования STI (модель <изображение). Однако для меня это не вариант, потому что я использую отношение has_many. </p>
Art
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
ОБНОВЛЕНИЕ
Я попытался запустить отладчик внутри метода 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">
Я использую скрепку (2.3.5) и Rails 3.0.1,Независимо от того, что я делаю, объект a.instance - это изображение, в котором заполнены только поля, связанные с вложением.Любые идеи?
UPDATE2
После прочтения большого количества на форуме Paperclip я не верю, что возможно получить доступ к экземпляру, прежде чем он был сохранен.Вы можете видеть только скрепку и все.
Я справился с этой проблемой, предварительно сохранив изображение из контроллера изображений с фильтром до - без вложения
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