Подтвердить что ты не робот

Хотите, чтобы переключатель rails simple_form отображал текст, а не значение

Я использую шаблон simple_form https://github.com/plataformatec/simple_form для создания некоторых полей ввода; одна из которых представляет собой группу переключателей, например:

<%= f.input :due_date, :collection => ['Today', 'Tomorrow', 'In 3 Days'], :as => :radio %>

Итак, это поле в базе данных "due_date" - это дата. Но вместо того, чтобы люди нажимали на этот маленький календарь, мы знаем, что обычно люди просто хотят этих трех вариантов. И я хочу использовать переключатель. Но вывод этой строки подсказывает, что если я сейчас удалю кнопку отправки, параметр due_date будет иметь указанные здесь значения, то есть сегодня, завтра или через 3 дня. Здесь вывод HTML для части Today.

<span>
<input class="radio optional" id="project_due_date_today" name="project[due_date]" type="radio" value="Today">
<label class="collection_radio" for="project_due_date_today">Today</label>
</span>

В идеале я хочу:

<%= f.input :due_date, :collection_to_params => [Date.today, Date.tomorrow, Date.today+3], :display_value => ['Today', 'Tomorrow', 'In 3 Days'], :as => :radio %>

Поэтому, когда пользователь нажимает на один и отправляет, я фактически получаю некоторую дату ISO, отправленную на сервер.

Любые идеи?

Спасибо!

4b9b3361

Ответ 1

<%= f.input :due_date, 
:collection => [[Date.today, 'Today'], [Date.tomorrow, 'Tomorrow'], [Date.today+3, 'In 3 Days']], 
:label_method => :last, 
:value_method => :first, 
:as => :radio_buttons %>

Таким образом, вы можете передать массив массивов в хэш коллекции, а затем еще два параметра, которые можно передать, чтобы указать VALUE этого входа и видимую метку этого ввода, и они должным образом называются label_method и value_method. метод слова, какой метод вызывает отдельный элемент рассматриваемой коллекции для извлечения метки или значения. В массиве массива array array.first - это мое значение, array.last, если моя метка. Следовательно, код выше

Ответ 2

Вот что я получил от ответа Nik So со всеми комментариями:

<%= f.input :due_date, 
collection: [['Today', Date.today], ['Tomorrow', Date.tomorrow], ['In 3 Days', Date.today+3]],
as: :radio_buttons %>