Как установить параметры HTML для collection_select в Rails?

83

Кажется, я не могу найти синтаксис для добавления класса в тег select, созданный Rails collection_select. Некоторая помощь?

tybro0103
источник
1
Можете ли вы привести пример того, что вы хотите сделать? Я не понимаю твоего вопроса.
klew
Конечно ... Я использую <% = f.collection_select ...%> рельсов для создания: <select ...> ... </select> Я просто хочу, чтобы это было: <select class = "foo "...> ... </select>
tybro0103

Ответы:

181

Многие хелперы Rails принимают несколько аргументов хеширования. Первый - это обычно параметры для управления самим помощником, а второй - это html_options, где вы указываете пользовательские идентификаторы, классы и т. Д.

Определение метода выглядит так:

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

Вы заметите несколько символов '= {}' в списке параметров. Чтобы использовать это, первый набор параметров, которые вы должны указать, должен быть заключен в фигурные скобки:

collection_select(:user, :title, UserTitle.all, :id, :name, {:prompt=>true}, {:class=>'my-custom-class'})

Если у вас нет других параметров, которые нужно указать, кроме класса html, просто поместите пустой хэш-заполнитель:

collection_select(:user, :title, UserTitle.all, :id, :name, {}, {:class=>'my-custom-class'})

Дополнительная документация по API доступна по адресу: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

Дрю Блас
источник
Ах, мне следовало прочитать документацию поближе :)
tybro0103
1
Вот расширение этого ответа, показывающее, как изменить стиль .css и использовать события <%= collection_select(:question , :text, Question.all , :id, :text, {:prompt => 'Select Question...'}, {:class=>'input', :name=>'normalSelect', :id=>'normalSelect', :style=>'width:50%', :onchange=>"$('#accordion').accordion('activate',2);$('#blind').show('blind', 500)"}) %>
onchange
Дрю, хороший ответ. Устранение всех моих сомнений относительно collection_select.
Swapnil Chincholkar
Достаточно точный ваш ответ. Большое спасибо.
Франсиско Кинтеро,
3
Спасибо за четкое объяснение. Это одна из хитростей Rails, которая плохо документирована в RailsDocs.
lacostenycoder
9
= f.collection_select :category_id, Category.order(:name), :id, :name, {}, {class: "store-select"}
Drjorgepolanco
источник