Rails 3: f.select - options_for_select - PullRequest
       19

Rails 3: f.select - options_for_select

31 голосов
/ 05 марта 2011

У меня есть форма в приложении Ruby on Rails3 с выпадающим меню, это мой текущий код для опции выбора:

<%= f.select :phone_type, options_for_select(["Select One", "Cell", "Work", "Office", "Home", "Other"],:disabled => ["Select One"]), :class => 'genForm_dropBox' %>

Насколько я понимаю, в качестве значения по умолчанию должно быть выбрано "Выбрать один"вариант, когда кто-то открывает страницу, но если он не выбирает один из других вариантов, при нажатии кнопки «Отправить» появляется ошибка.

Это верно для браузеров, таких как Safari и Chrome и IE7, но в Firefox и IE8в качестве первого параметра отображается «Ячейка», поскольку функция «Выбрать один» отключена.

Мне бы хотелось, чтобы по умолчанию отображалось «Выбор одного», но эта опция не использовалась при отправке формы.Нужно ли сценарий это в контроллер или модель?или я неправильно закодировал это в форме?

Ответы [ 6 ]

32 голосов
/ 05 марта 2011

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

<%= f.select :phone_type, options_for_select([["Select One", ""], "Cell", "Work", "Office", "Home", "Other"]), :class => 'genForm_dropBox' %>
20 голосов
/ 28 декабря 2012

Это немного чище:

<%= f.select :phone_type, [ 'Cell', 'Work', 'Office', 'Home', 'Other' ], :prompt => 'Select One' %>

Аргумент: prompt создает параметр с пустым значением.

12 голосов
/ 19 февраля 2014

В Rails 4 этот подход хорошо работает для меня.

<%= f.select :status, options_for_status, {}, prompt: 'Select One' %>

Тем временем я определил параметры в помощнике, чтобы не допустить беспорядка.

def options_for_status
  [
    ['First Option','first_option'],
    ['Second Option','second_option']
  ]
end
3 голосов
/ 23 апреля 2014

Спасибо всем, кто предоставил ответ.

Мне нужен был подобный код для проекта, над которым я работаю, и мне очень понравился подход Райана Бернетта.

Это то, что сработало дляя использую Rails 4.1.0.

<%= f.select :season, options_for_seasons, :prompt => 'Select One' %>

Затем я определил параметры в своем помощнике.

def options_for_seasons
  ['Spring', 'Summer', 'Autumn', 'Winter']
end

Я выбрал :prompt => 'Select One', потому что мне нужен только вариант «Выбрать один»быть перечисленным в форме редактирования, если сезон не был ранее выбран.

1 голос
/ 13 ноября 2015

может быть <%= f.select :phone_type, options_for_select(["Cell", "Work", "Office", "Home", "Other"]), :prompt => "Select One", :class => 'genForm_dropBox' %>

1 голос
/ 17 августа 2012

При добавлении ["Select One", ""] на экране редактирования всегда отображается "Select One", а не сохраненное значение.Рельсы 3.1 (17 августа 2012 г.)

...