2013-08-29 91 views
0

如果條件爲真,我試圖跳過belongs_to關聯的驗證。下面是我的代碼從belongs_to關聯中跳過validates_presence_of

class Venue < ActiveRecord::Base 
    has_many :events 
    validates_presence_of :name, :postcode, :category 
end 

class Event < ActiveRecord::Base 
    belongs_to :venue 
    accepts_nested_attributes_for :venue 
end 

所以我需要做的是跳過場地validates_presence_of驗證如果從活動模型中的標準是正確的。因此可以說,如果event_type等於'1',那麼它將忽略場所validates_presence_of呼叫,但如果event_type爲'2',則它仍將執行validates_presence_of呼叫。

+1

如果一個地點的東西可以有很多事件,如果1個事件類型是類型1而另一個是類型2,會發生什麼? –

回答

0

有關於此主題的Railscast。您還可以檢查出Rails Conditional Validation

基於上面的鏈接,你必須通過一個lambda如:

:if => lambda { |venue| venue.event.try(:event_type) == 2 } 
+0

這是假定一個場地只有一個事件。如果上面有人指出有兩個呢? –

+0

可以驗證一次驗證多個記錄嗎?我認爲他們是驗證>一次保存一個。這可能是我的錯誤假設...... – dax

+0

是的,你一次只能驗證一個,但我認爲OP的邏輯是有缺陷的。根據多種關係中的孩子來驗證父模型並沒有什麼意義。可能有更好的方法去做任何他想做的事情。 –