我真的在努力应该做一个相当简单的任务
在我有select_time和select_date并分开日期和时间之前,我无法弄清楚如何将其变为可读格式以与Time.now
进行比较。
我只想要2次验证,过去无法启动事件,并且无法在开始之前结束事件
以我的形式
<%= f.label :date_start %>
<%= f.datetime_select :date_start %>
在我的活动模型中
validate :start_date_cannot_be_in_the_past
def start_date_cannot_be_in_the_past
date = Time.new(date_start(1i).to_i, date_start(2i).to_i, date_start(3i).to_i, date_start(4i).to_i, date_start(5i).to_i)
if date < Time.now
errors.add(:date_start, "has already passed")
end
end
日期+时间选择器都会像这样分解值
"date_start(1i)"=>"2014",
"date_start(2i)"=>"11",
"date_start(3i)"=>"8",
"date_start(4i)"=>"04",
"date_start(5i)"=>"13"},
答案 0 :(得分:0)
首先你需要Time.zone.now
第二个是DB执行中的日期属性
Model.new(params)
应该只将date_start
设置为表单中的值。
然后在你做的模型中
def start_date_cannot_be_in_the_past
if date_start_changed? # don't validate the value if the value didn't change. Otherwise the record will not be valid after time passes
errors.add(:date_start, "has already passed") if date_start < Time.zone.now
end
true # never return false or the validation fails
end