我在我的新项目中使用 Paperclip gem 来存储图像。我还编写了一个简单的自定义回形针处理器,用于根据裁剪参数裁剪图像,存储在模型的虚拟属性中。
因此,客户端使用模型的实际数据库字段和crop_x、crop_y、crop_w、crop_h 属性传输表单,控制器基于“params”创建新实例——进展顺利——我检查了它,但随后发生了一些奇怪的事情。
这是我的模型:
class Jewel < ActiveRecord::Base
has_many :line_items
belongs_to :material
******* some code *********
before_save :debugmeBS
validates :category_id, :presence => true
attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
attr_accessible :name, :category_id, :price, :crop_x, :crop_y,
:crop_w, :crop_h, :image
after_update :reprocess_image, :if => :need_to_crop?
has_attached_file :image, :styles => { :full => "900x", :smallthumb => "80x80>" },
:processors => [:cropper, :thumbnail]
before_post_process :debugmePP
def need_to_crop?
# debugger
!crop_x.blank? && !crop_y.blank? &&!crop_w.blank? &&!crop_h.blank?
end
private
def debugmeBS
debugger
x=2
end
def debugmePP
debugger
x=3
end
end
放置在我的自定义处理器中的调试器显示crop_x、crop_y 和其他虚拟属性为空白(通过调用“need_to_crop?”方法),同时其他非虚拟属性设置正确。为了追踪错误,我放置了两个“before_”事件:before_save 和 Paperclip 的 before_post_process。结果是 before_post_process 在 before_save 之前被调用,并且在我所有的“crop_”属性都是 nil 的那一刻,但是在 before_save 触发的那一刻,这些都被正确设置了。
所以问题是为什么?以及如何设置我的虚拟属性以供回形针处理器访问?谢谢