当模型与其他模型关联时,您应该使用此帮助程序,并且还需要验证它们。
所以我认为相关模型的验证不会在没有validates_associated
的情况下运行。
但实际上,它是在没有它的情况下运行的。
有两种模式,学校和学生。
class School < ActiveRecord::Base
has_many :students
validates :name, presence: true
end
class Student < ActiveRecord::Base
belongs_to :school
validates :name, presence: true
end
在rails控制台上,
school = School.new
=> #<School id: nil, name: nil, created_at: nil, updated_at: nil>
school.students << Student.new
=> #<ActiveRecord::Associations::CollectionProxy [#<Student id: nil, name: nil, school_id: nil, created_at: nil, updated_at: nil>]>
school.name = "test shcool"
=> "test shcool"
school.save
(0.1ms) begin transaction
(0.1ms) rollback transaction
=> false
school.errors.full_messages
=> ["Students is invalid"]
如果使用如下的validates_associated:
class School < ActiveRecord::Base
has_many :students
validates :name, presence: true
validates_associated :students
end
class Student < ActiveRecord::Base
belongs_to :school
validates :name, presence: true
end
在rails控制台上,我运行了与上面完全相同的命令。但是最后一个命令school.errors.full_messages
返回了不同的结果。 (奇怪的是有重复的错误消息。)
school.errors.full_messages
=> ["Students is invalid", "Students is invalid"]
我的问题是
这是RailsGuide的错误吗?
为什么validates_associated
存在?
或者我有任何错误的想法?
我的环境是
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin14.0]
Rails 4.2.0
答案 0 :(得分:0)
在保存
之前检查相关对象是否有效