将after_validation与if或子句一起使用

Was*_*per 2 ruby activerecord ruby-on-rails ruby-on-rails-3

有人可以指出我正确的方向.

我正在使用after_validation来竞争地理编码,我想知道如何在一个或者||上进行操作 if子句的选项.

这按预期工作

class Address < ActiveRecord::Base

after_validation :geocode, if: :address_changed?
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

class Address < ActiveRecord::Base

after_validation :geocode, if: :address_changed? || :zipcode_changed?
Run Code Online (Sandbox Code Playgroud)

提前致谢.

mu *_*ort 5

如果您不想使用Thilo的Proc方法,那么您可以添加自己的自定义方法并使用它:

class Address < ActiveRecord::Base
  after_validation :geocode, if: :address_or_zip_changed?
private
  def address_or_zip_changed?
    address_changed? || zipcode_changed?
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您在多次验证时需要相同的复合条件,这可能(或可能不)更好地读取并且非常方便.