Rails验证,知道哪个字段无效?

rob*_*rob 6 validation ruby-on-rails ruby-on-rails-3

我有一个工作正常的模型.

class Product < ActiveRecord::Base
  validates_format_of :field1, with: /\A[0-9\+\-\/\s]+\Z/, allow_nil: true
  validates_format_of :field2, with: /\A[0-9\+\-\/\s]+\Z/, allow_nil: true
end
Run Code Online (Sandbox Code Playgroud)

我在数据库中的一些条目无效.这些是较旧的条目.我想运行一个种子,找到这些无效的条目

Product.all.each do |product|
  next if product.valid?
  # 
end
Run Code Online (Sandbox Code Playgroud)

我想清除无效的属性.让我说,产品1的值是testfield1这是无效的.现在我想清除这个领域,只有这个.

我如何找到无效的字段?就像是product.field1.valid?

Зел*_*ный 5

Rails api允许您使用以下ActiveModel::Errors#get方法通过键获取错误消息:

Product.all.each do |product|
  product.valid? # => run validation callbacks

  product.errors.messages          # => {:field1=>["cannot be nil"]}
  product.errors.get(:field1)      # => ["cannot be nil"]
  product.errors.get(:field2)      # => nil

  # `include?` and `has_key?` works too(it's aliases)
  product.errors.messages          # => {:field1=>["cannot be nil"]}
  product.errors.include?(:field1) # => true
  product.errors.include?(:field2) # => false

  # 
end
Run Code Online (Sandbox Code Playgroud)