在保存记录之前,有没有办法验证一个text_field不等于另一个?我有两个带有整数的text_fields,它们不能完全相同,以使记录有效。
答案 0 :(得分:9)
您可以添加自定义验证:
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')
答案 1 :(得分:5)
在你的模特中:
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
答案 2 :(得分:0)
更多乐趣:
validates :a, exclusion: { in: ->(thing) { [thing.b] } }
尽管这当然不是很可读,但是很优雅-我们将proc的排除验证与proc结合使用,以防止值相等。某些人可能更喜欢使用更详细的方法,但是我很简洁-不存在的代码不会有bug。另外,这将获得其错误消息的默认导轨位置,这对于i18n而言可能很方便。
(更好?)