2015-03-02 52 views
0

This section說:爲什麼`validates_associated`存在? railsguide的

當你的模型與其他模型協會,他們也需要驗證您應該使用這個幫手。

所以我認爲關聯模型的驗證不會運行沒有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 

on 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 

on Rails的控制檯,我作爲上面完全相同的命令。但是最後的命令school.errors.full_messages返回了不同的結果。 (奇怪的是,有重複的錯誤消息。)

school.errors.full_messages 
=> ["Students is invalid", "Students is invalid"] 

我的問題是

  1. 這是一個RailsGuide的錯誤呢?

  2. 爲什麼validates_associated存在?

或者我有什麼錯誤的想法?

我的環境是

ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin14.0] 
Rails 4.2.0 

回答

0

它會檢查,看是否關聯對象是有效節約

+0

謝謝,Coderhs之前! – tarky 2015-03-02 06:59:19

+0

但是,正如我上面寫的,即使沒有'validates_associated',關聯對象的驗證運行。 – tarky 2015-03-02 07:00:32

+0

@tarky第一個模式不會保存,除非兒童模態保存。 – coderhs 2015-03-02 07:18:43