2015-08-18 4 views
0

Я создаю отчет: мне нужно предоставить пользователям выбор, который позволяет им выбирать текущий месяц или следующие два месяца.rails helper select_month опция, чтобы не показывать все месяцы

Я обнаружил, что помощник рельсов select_month, который отлично работает, если вы хотите составить список всех месяцев. Есть ли способ указать месяцы для отображения с помощью select_month, или я полагаю, что для этого может быть лучше создать мой собственный помощник?

Например, я могу получить диапазоны, которые я хочу, на основе даты с помощью помощников даты, как показано ниже, и построить выбор, но я подумал, что, возможно, есть более чистый способ сделать это с помощью select_month.

получить текущий диапазон дат месяца вручную <% = Date.today.beginning_of_month%>, <% = Date.today.end_of_month%>

получить следующий диапазон дат месяца вручную <% = Date.today.beginning_of_month + 1.months%>, <% = n_month.end_of_month%>

получить второй диапазон дат месяц вручную на текущую дату <% = Date.today.beginning_of_month + 2.months%>, <% = month_after_next.end_of_month%>

До сих пор я могу видеть только способы изменить отображение даты метки, выберите имя и значение для всех месяцев с select_month.

Просто отображает все месяцы select_month(Date.today)

ответ

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> 

Я, однако хотел значение в качестве первой даты этого месяца. Рубины и рельсы обладают большой гибкостью. Вероятно, это еще лучший способ сделать это, но он работает для меня.

<%= 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> 
Смежные вопросы