我正在创建报告,我需要为用户提供一个选项,允许他们选择当前月份或接下来的两个月。
我发现了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
)
答案 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>