rails helper select_month选项不显示所有月份

时间:2015-08-18 17:13:11

标签: ruby-on-rails ruby-on-rails-4

我正在创建报告,我需要为用户提供一个选项,允许他们选择当前月份或接下来的两个月。

我发现了rails helper select_month ,如果你想要一个所有月份的列表,它会很有用。有没有办法指定使用select_month显示的月份,或者我认为为此创建自己的帮助可能更好?

例如,我可以根据日期使用日期帮助程序获取我想要的范围,如下所示,并构建一个选择,但我想也许有一种更简洁的方法可以使用select_month。

  

手动获取当前月份日期范围<%= Date.today.beginning_of_month%>,<%= Date.today.end_of_month%>

     

手动获取下个月的日期范围<%= Date.today.beginning_of_month +   1.months%GT;,<%= n_month.end_of_month%GT;

     

在当前日期手动获取第二个月的日期范围<%= Date.today.beginning_of_month +   2.months%GT;,<%= month_after_next.end_of_month%GT;

到目前为止,我只能看到修改日期标签显示的方法,用select_month选择所有月份的名称和值。

只显示所有月份 select_month(Date.today

1 个答案:

答案 0 :(得分:1)

经过一些研究后,您似乎无法使用 select_month 帮助程序指定月份范围。如果我错误的输入是受欢迎的。相反,我使用 select_tag 和一个适合我需要的日期范围。作为铁杆新手,我不断发现许多新方法。

如果你只是希望下载月份和月份数字,你可以轻松地做到这样的范围:

<%= select_tag(:selmonth, options_for_select((Date.today.month..Date.today.month + 2).map {|m| [Date::MONTHNAMES[m], m]})) %>

将返回

<select name="selmonth" id="selmonth">
  <option value="8">August</option>
  <option value="9">Sept</option>
  <option value="10">October</option>
</select>

但我希望将该值作为该月的第一个日期。 Ruby和rails提供了很大的灵活性。可能是一个更好的方法,但它适用于我。

<%= select_tag(:selmonth, options_for_select((Date.today.beginning_of_month..Date.today.beginning_of_month + 2.months).map{|d| [d.beginning_of_month.strftime("%B"), d.beginning_of_month.strftime("%F")]}.uniq)) %>

将返回

<select name="selmonth" id="selmonth">
  <option value="2015-08-01">August</option>
  <option value="2015-09-01">September</option>
  <option value="2015-10-01">October</option>
</select>