2016-12-15 105 views
0

我有一個模型Order這就好比Rails的?爲什麼叫'有效'不僅驗證了一些相關的記錄不是所有相關記錄

# app/models/order.rb 
class Order< ApplicationRecord 
    has_one :detail 
    has_one :extra 
.. 
end 

我有兩個orders

order1 = Order.first 
order1.detail #<OrderDetail:0x00 name: "abc", remark: 'test1'> 
order1.extra #<OrderExtra:0x00 email: nil, recipent: nil> 

order2 = Order.second 
order1.detail #<OrderDetail:0x00 name: "abc", remark: 'test1'> 
order1.extra #<OrderExtra:0x00 email: nil, recipent: "xyz"> 

當我請致電order1.valid?order1.save!它不會檢查OrderExtra驗證並返回true。但是當我撥打order2.valid?order2.save!時,它會檢查OrderExtra驗證。

order1.save! # true 
order2.save! # ActiveRecord Invalid OrderExtra 

我想知道如何軌檢查,如果他們要檢查相關的驗證,當呼叫save!和背後的原因。

請讓我知道,如果任何額外的需求在此。

回答

2

使用validates_associated強制執行相關的模型驗證

class Book < ActiveRecord::Base 
    has_many :pages 
    belongs_to :library 

    validates_associated :pages, :library 
end 

這驗證,如果該協會尚未分配不會失敗。如果您想確保該關聯既存在且保證有效,也需要使用validates_presence_of

class Library < ActiveRecord::Base 
has_many :books 
validates_presence_of :name 
end 
+0

謝謝,這有助於我。但我更感興趣知道軌道如何決定驗證相關記錄的原因?在我的情況下,它驗證一個,同時放棄檢查另一個訂單。 – punitcse