我有一個Event
模型與finish_time
場,並呼籲whenever
形式複選框。當whenever
被選中我想在參數設置finish_time
到nil
不管它的價值,當whenever
不檢查我想確保finish_time
是一個有效的日期之前,我將它保存在數據庫中。使用參數來控制導軌驗證
目前我使用的事件whenever
attr_accessor實現這一點:
params[:event][:finish_time] = nil if whenever = params[:event].delete(:whenever)
@event = Event.new(params[:event])
@event.whenever = whenever
和使用條件的驗證檢查finish_time
如果whenever
是false
validates_presence_of :finish_time, :unless => @whenever
我不滿意這個重複eates。 finish_time
可以是nil
的唯一方法是如果whenever
是true
,並且如果您更改了一個,則經常需要更改另一個。如果Event
更新爲新的finish_time
,則whenever
也必須更改爲false
。
理想情況下,我想將驗證移動到我的控制器。做直銷模式進入whenever
時,這樣可以通過設置finish_time
到null
很容易地表示,但用戶張貼到/事件將在如果他們沒有表示的選擇得到喊道。但是我無法想出一種方法來有條件地向控制器添加或刪除Event
的驗證,或者即使這是最好的方法。
刪除此重複的最佳方法是什麼?
關於保持我的要求乾的好點。也許有一些日期值不是null可能表示「不關心」而不是空的?我認爲問題來自於創造一個價值意味着兩件事。我想不出有什麼辦法可以求助於魔法數字。 – maxhawkins 2009-12-21 02:37:49
編輯答案需要建議 – 2009-12-21 02:45:33
這很有道理。謝謝! – maxhawkins 2009-12-21 02:49:23