如何验证 Rails 3 中缺少属性?

How to validate the absence of attributes in Rails 3?

我想查看用户是否勾选了 "matches_applicant_address" 框 - 然后确保没有提交任何地址详细信息。

这适用于 Rails4

validates  :address_line_1, :address_line_2,
:absence => true, :if => Proc.new{matches_applicant_address.present?}

有谁知道我怎么可能不使用缺席验证方法就写这个?

你可以做到

validate :address_lines_absent, if: Proc.new{ matches_applicant_address.present? }

def address_lines_absent
  errors.add :address_line_1 if address_line_1.present?
  errors.add :address_line_2 if address_line_2.present?
end

这将通过添加到错误数组使模型无效。

在Rails3中可以使用validates_each来指定自定义验证:

validates_each :address_line_1, :address_line_2, :if => Proc.new{ matches_applicant_address.present? } do |record, attr, value|
  record.errors.add(attr, "can't be present") unless value.blank?
end