我有一个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