新しいプロジェクトで画像を保存するために Paperclip gem を使用しています。モデルの仮想属性に保存されているトリミング パラメータに従って画像をトリミングするために作成した、単純なカスタム Paperclip プロセッサもあります。
したがって、クライアントはモデルの実際の db フィールドと 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_save と Paperclip の before_post_process という 2 つの「before_」イベントを配置しました。before_post_process が before_save の前に呼び出され、その瞬間にすべての「crop_」属性が nil であることが判明しましたが、before_save の発火の瞬間に、それらは適切に設定されています。
質問はなぜですか?仮想属性を Paperclip プロセッサがアクセスできるように設定する方法を教えてください。ありがとうございました