使用Rails select_month和select_year来捕获和存储日期

时间:2010-02-15 01:17:58

标签: ruby-on-rails datepicker

我想使用两个选项列表来控制进入日期字段;我关心的是月份和年份,而不是白天。到目前为止,我有以下内容:

<tr>
  <td>Date Range:</td>
  <td>
    <%= select_month(Date.today, :field_name=>"dateStarted") %>
    <%= select_year(Date.today, :field_name=>"dateStarted") %>
    &nbsp;to&nbsp;
    <%= select_month(Date.today, :field_name=>"dateEnded") %>
    <%= select_year(Date.today, :field_name=>"dateEnded") %>
  </td>
</tr>

这将正确设置与今天的日期对应的月份和年份。不幸的是,选择字段不响应相应字段中的值。我错过了什么?

此外,我假设我需要在控制器的创建和更新操作中组合这两个字段来创建将存储在数据库中的实际日期,但我不清楚如何这样做。

非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

为什么不使用date_select(而不是select_month和select_year)

date_select("dateRange","dateStarted", {:default => Date.today, :discard_day => true})
date_select("dateRange","dateEnded", {:default => Date.today, :discard_day => true})

这将创建参数dateRange [dateStarted]和dateRange [dateEnded]以及年份和月份的子选择。

另一个澄清,为了使其与创建和更新操作无缝协作,您应该将“dateRange”替换为实际的模型名称。这样它就会被正确嵌入参数hash

答案 1 :(得分:0)

如果您在rails应用程序中使用simple form,那么您可以执行以下操作:

= simple_form_for(resource) do |f|
  // ...
  = f.input :date_started, discard_day: true, end_year: Date.today.year, order: [:month, :year]
  = f.input :date_ended, discard_day: true, end_year: Date.today.year, order: [:month, :year]