3

我一直在阅读有关 rails 验证的信息,该validates_associated方法验证所有子记录(不仅仅是新记录),而has_many关联的默认验证仅保存新的子记录。

从概念上讲,我理解这一点,但我试图提出一个为什么子值无效的用例。例如,如果 a Movie has_many Ratings,我为什么要编辑评级而不验证它?

有人可以提供一个实际的例子来说明哪里validates_associated是必要的吗?

4

2 回答 2

1

让我们以与您提供的电影 has_many Ratings 相同的示例为例。如果您要与评分一起保存电影,并且评分有验证错误,则不应保存该电影。使用 validates_related 将有助于这一点 - 只有当它的孩子有效时,电影才会被保存。希望这可以帮助你

于 2012-10-15T05:09:39.130 回答
0

考虑Rating有一个名为的字段score,它必须是>= 0and <= 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 回答