如果我有一个属性,我想做一个自定义验证,有一个真/假结果,我知道我可以做一些事情,如:
validates_each :start_at do |record, attr, v|
record.errors.add(attr, 'must be in the future') if v < Time.now
end
但在这种情况下,必须直接访问记录对象似乎有些过分。我希望能够做一些更精简的事情,例如:
validates :start_at, message: 'must be in the future', using: Proc.new { |v| v < Time.now }
甚至:
validates_by_block(:start_at, message: 'must be in the future') { |v| v < Time.now }
Rails是否提供这样的方法或选项?
答案 0 :(得分:1)
在Rails中不支持验证器。您必须自己编写自定义验证器:
validates :start_at, :presence => true
validate :start_at_cannot_be_in_the_past
private
def start_at_cannot_be_in_the_past
errors.add(:start_at, "can't be in the past") if start_at && start_at < Time.now
end