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_associated 関数は何ですか?

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 に答える