0

在 rails 中可以创建一个函数,每次更改特定属性时,rails 都会执行一个函数。就我而言,每次 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

对我来说,最优雅的解决方案是根据要地理编码的属性(地址)是否发生变化来使用条件验证。您可以在您正在地理编码的模型的“after_validation”回调中执行类似的操作,或者将其放置在任何适合您目的的 Active Record 回调中:

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

于 2012-01-18T17:21:44.803 回答