Rails用例用于validates_associated

时间:2012-10-15 01:41:35

标签: ruby-on-rails validation has-many

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

从概念上讲,我理解这一点,但我正在尝试提出一个用例,说明为什么子值无效。例如,如果Movie has_many Ratings,我为什么要编辑评分而不验证呢?

有人可以提供实际需要validates_associated的例子吗?

2 个答案:

答案 0 :(得分:1)

让我们采用与您提供的电影has_many评级相同的示例。如果您要将电影与评分一起保存,并且评级有验证错误,则不应保存电影。使用validates_associated将有助于此 - 只有在其子项有效时才会保存电影。希望这可以帮助你

答案 1 :(得分: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,我就不会有任何伤害。