2017-04-25 33 views
0

我有has_many關聯模型的自定義驗證上下文。我相信我已經正確設置了驗證,但驗證不會失敗。以下是我的型號Rails 4 validates_associated on custom_context不會失敗,當它應該

class Report < ActiveRecord::Base 
    has_many :shifts 
    validates_associated :shifts, on: :submit 
end 

class Shift < ActiveRecord::Base 
    validates_presence_of :name 
    validates_presence_of :clock_in, on: :submit 
end 

r = Report.new 
r.shifts << Shift.new(:name => "Nick") 
r.valid? 
=> true 
r.valid?(:submit) 
=> true #should be invalid since clock_in is blank still. 

我的語法關閉了嗎?我錯過了什麼嗎?

回答

0

您確定這個班次是否添加到報告中?首先打印報告,然後再添加班次,只是爲了確保。

,並添加到您的報表模型

accepts_nested_attributes_for :shifts, reject_if: :all_blank, allow_destroy: true 

與此,validates_associated是沒有必要的,因爲驗證總是會在這個情況下被解僱。

+0

在我的真實代碼中,我的確有accept_nested_attributes_for,但錯誤仍然存​​在,所以我拿出來讓問題更加「純」。在':submit'上下文中運行某些驗證是關鍵。要創建,更新報表應該允許在沒有提交上下文有效的情況下通過,但是當報表將被「提交」時,需要驗證所有字段。這種具有自定義上下文的功能將非常有用,但它似乎不像我期望的那樣行事。 – Nick

相關問題