有人可以指出我正确的方向。
我正在使用after_validation来竞争地理编码,我想知道如何在一个或者||上进行操作if子句的选项。
这可以按预期工作
class Address < ActiveRecord::Base
after_validation :geocode, if: :address_changed?
但这不是
class Address < ActiveRecord::Base
after_validation :geocode, if: :address_changed? || :zipcode_changed?
提前致谢。
答案 0 :(得分: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
如果您需要在多次验证中使用相同的复合条件,这可能(或可能不)更好地阅读并且非常方便。
答案 1 :(得分:3)
:if - 指定要调用的方法,proc或字符串,以确定是否应进行验证(例如:if =&gt;:allow_validation,或:if =&gt; Proc.new {| user | user.signup_step&gt; 2})。方法,proc或string应该返回或计算为true或false值。
所以试试proc:
if: Proc.new { |a| a.address_changed? || a.zipcode_changed? }
答案 2 :(得分:0)
你可以使用:if
validates :email, :unique=> true, :if => Proc.new { email.present? }
或者您也可以使用lambda
validates :email, :unique=> true, :if => lambda { email.present? }