0

レールでは、特定の属性が変更されるたびにレールが関数を実行する関数を作成できます。私の場合、object.address (geocoded_by :address と after_validation :geocode があります) が変更されるたびに、object.geocode を実行したいと考えています。私はレール3にいます

4

3 に答える 3

3

フィールドを渡すだけで、after_validationの汚れをチェックできます。

after_validation :geocode, :if => :address_changed?
于 2012-02-26T21:43:31.310 に答える
0

最善の解決策は、モデルに ActiveModel::Dirty を含めることだと思います。その後、コールバックで確認できます

class MyModel < ActiveRecord::Base
  def after_save
     if address_changed? do
       #some stuff..
     end
  end
end

ActiveModel::Dirtyを参照してください

于 2011-10-06T15:15:39.270 に答える
0

私にとって最も洗練された解決策は、geocoded_by (住所) である属性が変更されたかどうかに基づいて、条件付き検証を使用することです。ジオコーディングしているモデルの「after_validation」コールバックで次のようなことを行うか、目的に合った Active Record コールバックに配置できます。

after_validation :geocode, :if => lambda{ |obj| obj.address_changed?}

于 2012-01-18T17:21:44.803 に答える