Rails验证date_select和time_select

时间:2014-11-08 04:14:09

标签: ruby-on-rails ruby validation activerecord

我真的在努力应该做一个相当简单的任务

在我有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"},

1 个答案:

答案 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