我不清楚这种方法实际上做了什么或何时使用它。
假设我有这些模型:
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是什么?
答案 0 :(得分:0)
您可以执行has_many :phone_numbers, validate: false
,并且您所看到的验证不会发生。
为什么要使用validates_associated
呢?您可能希望执行validates_associated :phone_numbers, on: :create
并跳过更新验证(例如,如果您的数据库中已存在错误数据,并且您不想让现有用户对此感到困扰)。
还有其他方案。根据文档,has_one
默认为validate: false
。所以你需要validates_associated
来改变它。