1

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

假设我有这些模型:

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_related 是什么?

4

1 回答 1

0

您可以这样做has_many :phone_numbers, validate: false,并且您看到的验证不会发生。

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

还有其他情况。has_one根据文档是validate: false默认的。所以你需要validates_associated改变它。

于 2015-08-06T04:25:17.480 回答