Если кому-то интересно, мне удалось заставить это работать. Единственное, что действительно помогло мне больше всего исправить это консоль отладки Rails (которую я наконец-то начал правильно использовать), которая позволила мне более внимательно взглянуть на переменные в классе Paperclip :: Thumbnail , который мой Autobackground
класс наследуется от.
Вот что я сделал: я изменил стиль :auto_bg
, чтобы он указывал на специальную строку, которую я мог идентифицировать в своем процессоре. Поскольку мой процессор имеет подклассы от Paperclip::Thumbnail
, строка, на которую указывает стиль, сохраняется в @options[:geometry]
. Все, что мне нужно сделать в переопределенном методе transformation_command
, это проверить, установлен ли @options[:geometry]
в специальную строку auto_bg
, а затем запустить мой метод create_auto_bg
вместо того, чтобы позволить классу Thumbnail
делать это как обычно. Мой старый метод create_auto_bg
не создавал должным образом массив строк, который необходим Thumbnail
для создания команды ImageMagick, поэтому я переписал его и использовал переменную @current_geometry
, чтобы найти высоту исходного изображения вместо ошибочного target = @attachment.instance
метод, который я скопировал из Railscast Райана Бэйта (не уверен, как это работает в его коде).
Я уверен, что есть более элегантное решение для этого, но я все еще новичок в Ruby и RoR, так что сейчас это нужно сделать. Надеюсь, это поможет любому, кто столкнулся с подобной проблемой:)
#/app/models/image.rb
class Image < ActiveRecord::Base
belongs_to :review
has_attached_file :image, :styles => { :thumb => "32x32#", :auto_bg => "auto_bg" }, :processors => [:autobackground]
end
#/lib/paperclip_processors/Autobackground.rb
module Paperclip
class Autobackground < Thumbnail
def transformation_command
if @options[:geometry] == "auto_bg"
create_auto_bg
else
super
end
end
def create_auto_bg
#debugger
height = @current_geometry.height.to_i.to_s
trans = []
trans << "-crop" << "1x#{height}+0+0"
trans
end
end
end