2011-05-08 24 views
1

このメソッドが実際に何を行うのか、いつ使用するのかは不明です。activerecord validation - 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は何ですか?

答えて

0

あなたはhas_many :phone_numbers, validate: falseを実行できますが、表示されている確認は行われません。

なぜvalidates_associatedを使用しますか? validates_associated :phone_numbers, on: :createを実行して、更新時に検証をスキップしたい場合があります(たとえば、データベースに既に不正なデータがあって、既存のユーザーに迷惑をかけたくない場合など)。

その他のシナリオがあります。 docsによるhas_oneはデフォルトでvalidate: falseです。そのためにはvalidates_associatedが必要です。