Ruby on Rails:有没有办法告诉哪些字段在ActiveRecord中验证失败?

时间:2010-04-25 00:09:27

标签: ruby-on-rails ruby activerecord

我正在尝试创建一个XML构建器文件,告诉用户确切地知道哪些字段在输出中验证失败。我还想将它们的输入显示给它们,因此需要我确定哪些字段未通过验证。这意味着如果某人未能创建新的用户资源,我想显示有意义的XML(除了有意义的HTTP状态编号),例如:

<errors>
    <user>
        <email>bad@email: Invalid email format</email>
    </user>
<errors>

如果不知道哪个字段失败,上面的XML构建器文件很难做到。如果我只是迭代错误消息,我将不知道如何探索我的@user对象以获取用户提供的值。

2 个答案:

答案 0 :(得分:0)

使用ActiveRecord::Errors#on

company = Company.create(:address => '123 First St.')
company.errors.on(:name)      # => ["is too short (minimum is 5 characters)", "can't be blank"]
company.errors.on(:email)     # => "can't be blank"
company.errors.on(:address)   # => nil

或者您可以使用ActiveRecord::Errors#each获取所有带错误的属性

company = Company.create(:address => '123 First St.')
company.errors.each{|attr,msg| puts "#{attr} - #{msg}" }
# => name - is too short (minimum is 5 characters)
#    name - can't be blank
#    address - can't be blank

答案 1 :(得分:0)

直接来自API docs

company.errors.each{|attr,msg| puts "#{attr} - #{msg}" } # =>
  name - is too short (minimum is 5 characters)
  name - can't be blank
  address - can't be blank

这不是您要找的:attr变量将是字段名称。

相关问题