是否可以将错误添加到 ActiveRecord 对象而不将其与特定属性关联?

问题描述 投票:0回答:6

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

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

ruby-on-rails activerecord rails-activerecord
6个回答
33
投票

尝试做这样的事情:

# 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

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


9
投票
model_instance.errors[:base] << "msg"

9
投票

上面的答案已经过时了。 对于 Rails 5 及更高版本,您需要调用 ActiveModel::Errors add 方法,并将

:base
作为第一个参数。 请参阅下面的示例。

model_instance.errors.add(
  :base, 
  :name_or_email_blank, 
  message: "either name or email must be present"
)

6
投票

您可以使用

errors[:base]
添加与某一属性无关的一般错误 - rails 指南链接


1
投票

您实际上可以随意命名哈希键:

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

稍微描述一下。


-1
投票

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

现在我们就做类似的事情。

self.errors.add(:some_key, "Some Error!")
© www.soinside.com 2019 - 2024. All rights reserved.