3

私はレールの検証について読んでおり、validates_associatedメソッドはすべての子レコード (新しいものだけでなく) を検証しますが、has_many関連付けのデフォルトの検証は新しい子レコードのみを保存することです。

概念的にはこれを理解していますが、子の値が無効になる理由のユースケースを考え出そうとしています。たとえばMovie has_many Ratings、評価を編集して検証しないのはなぜですか?

誰かvalidates_associatedが必要な場所の実際の例を提供できますか?

4

2 に答える 2

1

Movie has_many Ratings を提供したのと同じ例を見てみましょう。評価とともに映画を保存しようとしていて、評価に検証エラーがある場合、その映画は保存すべきではありません。validates_associated を使用すると、これに役立ちます。ムービーは、その子が有効な場合にのみ保存されます。これがお役に立てば幸いです

于 2012-10-15T05:09:39.130 に答える
0

とである必要があるRatingという名前のフィールドがあると考えてください。 で:score>= 0<= 5
rails console

>> m = Movie.first
=> #<Movie id: 1, name: "Lord of the Rings">

>> r = m.ratings.first
=> #<Rating id: 1, score: 5>

>> m.valid?
=> true

>> r.valid?
=> true

>> r.score = -1
=> -1

>> r.valid?
=> false

使用しない場合validates_associated:

>> m.valid?
=> true

使用する場合validates_associated:

>> m.valid?
=> false

>> m.errors.messages
=> {:ratings => ["is invalid"]}

ただし、 を使用しない場合validates_associated、 を実行するm.saveと、映画のレコードのみが更新され、関連する評価は更新されません。したがって、使用しなくても害はありませんvalidates_associated

于 2018-04-25T01:02:53.963 に答える