如何对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?
答案 0 :(得分:2)
您可以使用
验证模型的关联validates_associated :shirt
这样,当您致电person.save
时,它会触发shirt
的验证。
是的,您可以使用person.shirt.errors
访问关联的错误,但请务必在触发验证后执行此操作。例如:
person = Person.new
person.errors # => will be empty
这是因为验证尚未运行。因此,您需要调用save
或valid?
或任何其他触发验证的方法。
person = Person.new
person.valid?
person.errors # => will have errors in person
对于协会来说也是如此:
person.shirt.valid?
person.shirt.errors
但是,由于您正在验证与validates_associated
的关联,因此使用person.valid?
即可触发衬衫的验证。