有没有办法在不检查错误消息的情况下检索失败的验证?
如果我的模型带有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
答案 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}"}