I've got photo on my model
has_attached_file :photo, BucketConfig.default.merge(
processors: [:rotator],
styles: {
original: Proc.new { |a| { rotation: a.rotation } }
},
default_url: ActionController::Base.helpers.asset_path('assets/request_default.png')
)
To catch a rotation param I do something like this
attr_accessor :rotation
before_save :adjust_rotation
before_update :reprocess_image
protected
def adjust_rotation
self.rotation = self.rotation.to_i
self.rotation = self.rotation % 360 if self.rotation >= 360 || self.rotation <= -360
end
def reprocess_image
self.photo.reprocess! unless self.rotation.zero?
end
my Rotator process in lib/paperclip
module Paperclip
class Rotator < Processor
def transformation_command
if rotator_command
rotator_command + super.join(' ')
else
super
end
end
def rotator_command
target = @attachment
if target.rotation.present?
" -rotate #{target.rotation} "
end
end
end
end
When I call
m = Model.first
m.rotation=90
m.save
I've got error:
NoMethodError - undefined method `closed?' for nil:NilClass
Did you mean? clone:
paperclip (4.3.7) lib/paperclip/attachment.rb:582:in `block in unlink_files'
paperclip (4.3.7) lib/paperclip/attachment.rb:581:in `unlink_files'
paperclip (4.3.7) lib/paperclip/attachment.rb:536:in `post_process_style'
paperclip (4.3.7) lib/paperclip/attachment.rb:511:in `post_process_styles'
paperclip (4.3.7) lib/paperclip/attachment.rb:504:in `block (2 levels) in post_process'
Why my reprocess! method doesn't work ? Do I something wrong with my rotator process? Where's the problem?
You have no make method: https://github.com/rezeko/paperclip/blob/master/lib/paperclip/processor.rb#L9
A fix is to use class Rotator < Thumbnail
, and just inherit the processing setup by the default processor.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.