我的模特上有照片
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')
)
要抓住一个旋转参数,我会做这样的事情
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
我在lib / paperclip中的Rotator进程
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
当我打电话
m = Model.first
m.rotation=90
m.save
我有错误:
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'
为什么我要重新加工!方法不起作用?我的旋转器过程有问题吗?问题出在哪里?
答案 0 :(得分:0)
您没有make方法:https://github.com/rezeko/paperclip/blob/master/lib/paperclip/processor.rb#L9
一种解决方法是使用class Rotator < Thumbnail
,仅继承默认处理器的处理设置。