Rails4 collection_select с параметрами данных

#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. нет, он вырезал и вставил то же самое туда, куда я вставил. довольно странно.