ruby on rails - has_many属性验证

时间:2011-03-03 12:16:13

标签: ruby-on-rails ruby

如何对has_one关联的属性执行验证检查(并将错误消息插入错误结构)。

如果在“衬衫”或“裤子”中发生错误,我该如何访问该错误? 错误是在person.shirt.errors [:color]?

当我触发person.save时,是否激活了person.shirt的验证?

当我触发person.save并且person.shirt中有错误时,会在哪里保存错误消息?在person.shirt.errors中或在person.errors中?

class Person < ActiveRecord::Base
      has_one   : shirt
      has_many  : pants
      validates :name, :presence => true
      validates_length_of :name, :minimum => 3
end

person = Person.new(:name => "JD")
person.shirt.create(:color=> "red")
person.pants.create(:type=> "jeans")
person.valid?

1 个答案:

答案 0 :(得分:2)

您可以使用

验证模型的关联
validates_associated :shirt

这样,当您致电person.save时,它会触发shirt的验证。

是的,您可以使用person.shirt.errors访问关联的错误,但请务必在触发验证后执行此操作。例如:

person = Person.new
person.errors # => will be empty

这是因为验证尚未运行。因此,您需要调用savevalid?或任何其他触发验证的方法。

person = Person.new
person.valid?
person.errors # => will have errors in person

对于协会来说也是如此:

person.shirt.valid?
person.shirt.errors

但是,由于您正在验证与validates_associated的关联,因此使用person.valid?即可触发衬衫的验证。