23

如果您需要编写相当复杂的验证代码,则错误有时不在于特定属性,而在于其中几个属性的组合。

例如,如果我想验证 :start_date 和 :end_date 之间的时间段不包含任何星期天,则错误不属于这些字段中的任何一个,但错误添加方法需要指定它。

4

6 回答 6

31

尝试做这样的事情:

# Your Model.rb
validate :my_own_validation_method

...

private

def my_own_validation_method
    if there_is_no_sunday_in_the_range
        self.errors[:base] << "You must have a Sunday in the time range!"
    end
end

基本上,您可以将自己的复杂验证添加到模型中,当您发现发生了错误时,您可以在错误数组中添加错误字符串。

于 2012-05-30T14:46:40.637 回答
9
model_instance.errors[:base] << "msg"
于 2012-05-30T14:51:59.430 回答
7

上面的答案已经过时了。对于 Rails 5 及更高版本,您需要调用ActiveModel::Errors add方法并将其:base作为第一个参数。请参见下面的示例。

model_instance.errors.add(
  :base, 
  :name_or_email_blank, 
  message: "either name or email must be present"
)
于 2017-11-07T14:02:06.713 回答
6

您可以使用errors[:base]添加与一个属性无关的一般错误 - rails guide link

于 2012-05-30T14:46:32.650 回答
1

实际上,您可以随意命名散列键:

instance.errors[:case_of_the_sundays] << "Error, son."

只是描述性强一点。

于 2013-03-15T03:32:34.460 回答
0

更新:不推荐使用用于添加错误的消息数组。

现在我们做类似的事情。

self.errors.add(:some_key, "Some Error!")
于 2021-06-24T22:14:18.100 回答