我正在尝试为表单实现datetime_select选项。我之前使用的是一个简单的日期选择器,但要求已经改变。
<%= f.datetime_select :ends_at, :start_year => Date.current.year %>
我想要实现的只是给用户三个选项:“一小时”,“两小时”,“三小时”供选择。通过表单POST发送的所选选项的相应值将从按下提交按钮的时间开始计算。
如何为日期时间数据类型的用户提供这些选项?
答案 0 :(得分:1)
好的,你可以这样做:
在模型中定义:
TIMER = [{"time"=>"One Hour", "val"=>"1"}, {"time"=>"Two Hours", "val"=>"2"}, {"time"=>"Three Hours", "val"=>"3"}]
在表单中使用其他选择字段:
<%= f.select :time_to_end, options_for_select(Model::TIMER.map { |obj| [obj['time'], obj['val']] }) %>
然后在模型中允许time_to_end
参数作为attr_accesible
。
attr_accessible :time_to_end
此外,添加一个保存前回调以更改ends_at
字段:
before_save :update_ends_at_field
private
def update_ends_at_field
self.ends_at = Time.now + time_to_end.to_i.hours
end
我没有测试上面的代码。希望你明白了。
答案 1 :(得分:0)
我最终使用
<%= f.select :ends_at, options_for_select(ApplicationHelper::TIMER.map { |obj| [obj['time'], obj['val']] })%>
表单中的。
其中Timer定义为:
module ApplicationHelper
TIMENOW = DateTime.now
TIMER = [{"time"=>"Half Hour", "val"=> TIMENOW + 0.5.hour},{"time"=>"One Hour", "val"=> TIMENOW + 1.hour}, {"time"=>"One Day", "val"=> TIMENOW + 24.hour}, {"time"=>"Three Days", "val"=> TIMENOW + 3.day}, {"time"=>"Seven Days", "val"=> TIMENOW + 7.day}]
end
ApplicationHelper中的