【发布时间】:2012-02-23 19:50:09
【问题描述】:
有没有办法在保存记录之前验证一个 text_field 不等于另一个?我有两个带有整数的 text_fields,它们不能相同以使记录有效。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 validation
有没有办法在保存记录之前验证一个 text_field 不等于另一个?我有两个带有整数的 text_fields,它们不能相同以使记录有效。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 validation
您可以添加自定义验证:
class Something
validate :fields_a_and_b_are_different
def fields_a_and_b_are_different
if self.a == self.b
errors.add(:a, 'must be different to b')
errors.add(:b, 'must be different to a')
end
end
每次验证您的对象时都会调用它(明确地或当您使用验证保存时),并将向两个字段添加错误。您可能希望两个字段都出现错误,以便在表单中以不同方式呈现它们。
否则你可以只添加一个基本错误:
errors.add(:base, 'a must be different to b')
【讨论】:
在您的模型中:
validate :text_fields_are_not_equal
def text_fields_are_not_equal
self.errors.add(:base, 'Text_field1 and text_field2 cannot be equal.') if self.text_field1 == self.text_field2
end
【讨论】:
更多乐趣:
validates :a, exclusion: { in: ->(thing) { [thing.b] } }
虽然这当然不是非常可读,但它很优雅 - 我们利用 proc 的排除验证来防止值相等。有些人可能更喜欢更冗长的方法,但我喜欢简洁——不存在的代码不能有错误。另外,这将在默认的 rails 位置获得错误消息,这对于 i18n 的目的可能很方便。
(更好?)
【讨论】: