activerecord validation - validates_associated

时间:2011-05-08 17:38:12

标签: validation activerecord validates-associated

我不清楚这种方法实际上做了什么或何时使用它。

假设我有这些模型:

Person < ...
  # id, name
  has_many :phone_numbers
end

PhoneNumber < ...
  # id, number
  belongs_to :person
  validates_length_of :number, :in => 9..12    
end

当我为这样的人创建电话号码时:

@person = Person.find(1)
@person.phone_numbers.build(:number => "123456")
@person.phone_numbers.build(:number => "12346789012")
@person.save

保存失败,因为第一个数字无效。对我来说这是件好事。但我不明白的是,它是否已经验证了相关记录函数validates_associated是什么?

1 个答案:

答案 0 :(得分:0)

您可以执行has_many :phone_numbers, validate: false,并且您所看到的验证不会发生。

为什么要使用validates_associated呢?您可能希望执行validates_associated :phone_numbers, on: :create并跳过更新验证(例如,如果您的数据库中已存在错误数据,并且您不想让现有用户对此感到困扰)。

还有其他方案。根据文档,has_one默认为validate: false。所以你需要validates_associated来改变它。