Rails如何在日期时间选择中给出选项

时间:2017-11-23 00:06:01

标签: ruby-on-rails arrays forms datetime ruby-on-rails-5

我正在尝试为表单实现datetime_select选项。我之前使用的是一个简单的日期选择器,但要求已经改变。

<%= f.datetime_select :ends_at, :start_year => Date.current.year %>

我想要实现的只是给用户三个选项:“一小时”,“两小时”,“三小时”供选择。通过表单POST发送的所选选项的相应值将从按下提交按钮的时间开始计算。

如何为日期时间数据类型的用户提供这些选项?

2 个答案:

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