#ruby-on-rails #ruby-on-rails-4 #dropdownbox #collection-select
#ruby-on-rails #ruby-on-rails-4 #выпадающий список #коллекция-выбор
Вопрос:
я хочу воспроизвести следующую структуру выбора с помощью FormHelper
<select data-placeholder="Choose a Country..." name="select2" class="required select">
<option value=""></option>
<option value="opt2">India</option>
<option value="opt2">United States of America</option>
</select>
Что я пробовал?
<%= f.collection_select(:country_id, @countries, :id, :name, { :prompt => true },
{ :class => 'select', :selected => params[:country_id], :date => {:placeholder => 'Choose a Country...' }}) %>
Но тег-заполнитель не распознается и показывает Please Select
Комментарии:
1. удалить
{ :prompt => true }
? Я думаю, параметры должны быть в одной области.
Ответ №1:
Это:
= collection_select("user", "country_id", @countries, :id, :name, {:prompt => true}, { :class => 'select', :selected => 1, "data-placeholder" => 'Choose a Country...' })
Возвращает этот HTML (я добавляю user
для тестирования):
<select class="select" data-placeholder="Choose a Country..." id="user_country_id" name="user[country_id]" selected="selected"><option value="">Please select</option>
<option value="1">Russia</option>
<option value="2">USA</option></select>
Я думаю, это то, чего вы ожидали, но для меня он не показывает заполнитель. Чтобы показать это, просто измените prompt
заголовок на заполнитель:
f.collection_select(:country_id, @countries, :id, :name, {:prompt => 'Choose a Country...'}, { :class => 'select', :selected => params[:country_id])
Для меня это работает нормально.
Комментарии:
1. это работает. но я хочу передать его в качестве заполнителя данных для моего плагина, чтобы захватить и оформить его
2. Что, если
:prompt => 'Choose a Country...'
и"data-placeholder" => 'Choose a Country...' }
?3. нет, его не подбирают. похоже, тема нуждается в заполнителе данных, но я не могу установить i так, как вы предложили, или другие ответы
Ответ №2:
Из документации rails
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
Согласно синтаксическому :selected
параметру, он должен входить внутрь options
вместо html_options
Все, что вам нужно сделать, это удалить :selected
параметр из html_options
и включить его внутрь options
<%= f.collection_select(:country_id, @countries, :id, :name, { :prompt => true, :selected => params[:country_id] }, { :class => 'select', :date => {:placeholder => 'Choose a Country...' }}) %>
Комментарии:
1. затем поместите выбранный, как вы упомянули. после неудачной проверки значение не сохраняется. в моем случае это так: (
2. Я предполагаю, что вам нужно изменить параметры [:country_id] на что-то, что возвращает сохраненное значение из базы данных, например @user.country_id
3. нет, он вырезал и вставил то же самое туда, куда я вставил. довольно странно.