以编程方式检查Rails中哪些验证失败

时间:2011-10-03 12:20:06

标签: ruby-on-rails-3 validation

有没有办法在不检查错误消息的情况下检索失败的验证?

如果我的模型带有validates :name, :presence => true, :uniqueness => true,我怎样才能检查确定哪些验证失败(它是唯一性还是存在?)而不执行以下操作:

if error_message == "can't be blank"
  # handle presence validation
elsif error_message = "has already been taken"
  # handle uniqueness validation
end

3 个答案:

答案 0 :(得分:3)

这是一个相对较新的方法,可以让你做到这一点,据我所知,它没有在任何地方记录,我只是在阅读源代码时偶然发现它,它是{ {1}}方法:

#added?

以下是原始拉取请求:https://github.com/rails/rails/pull/3369

答案 1 :(得分:2)

ActiveModel::Errors只不过是一个愚蠢的哈希,将属性名称映射到人类可读的错误消息。验证(例如the presence one)直接将其消息添加到errors对象,而不指定它们的来源。

简而言之,似乎没有官方的方式来做到这一点。

答案 2 :(得分:1)

您可以在错误方法中隐藏所有错误。在保存的无效记录上尝试此操作:

record.errors.map {|a| "#{a.first} => #{a.last}"}