2015-02-04 4 views
1

У меня есть форму для создания нового пользователя. Я пытаюсь использовать gem selectize-rails, чтобы позволить возможность добавить несколько связанных пользователей:Рельсы: выбор мультиселекта только отправляет последний выбор

просмотров/пользователей/new.html.erb

<%= form_for @user, :url => users_path do |f| %> 
    <select name="users" id='select-user'> 
    <option value="">Select at least one user</option> 
    <% User.all.each do |user| %> 
     <option value="<%= user.name %>"><%= user.name %></option> 
    <% end %> 
    </select> 
    <script type="text/javascript"> 
     var select = $('#select-user').selectize({ 
      persist: false, 
      maxItems: 3, 
      create: false, 
      valueField: 'name', 
      labelField: 'name', 
      searchField: ['name'], 
      render: { 
       item: function(item, escape) { 
        return '<div>' + 
         (item.name ? '<span class="select-name">' + escape(item.name) + ',</span>' : '') + 
        '</div>'; 
       }, 
       option: function(item, escape) { 
        var label = item.name; 
        return '<div>' + 
         '<span class="select-label">' + escape(label) + '</span>' + 
        '</div>'; 
       } 
      }, 
      preload: false, 
      load: function(query, callback) {} 
     }); 
    </script> 
    <%= f.submit "Submit", class: "btn btn-primary" %> 
<% end %> 

Контроллеры/user_controller.rb

def new 
     @user = User.new 
    end 

    def create 
     @user = User.new(user_params) 
     if @user.save 
     redirect_to root_path 
     else 
     redirect_to new_user_path 
     end 
    end 

    private 

     def user_params 
     params.require(:user).permit(:name, :users) 
     end 

В new.html.erb код работает нормально: я могу добавить до трех пользователей. Но когда я его отправлю, params["users"] содержит только последнего пользователя, добавленного мной, независимо от того, сколько я пытался добавить. Кто-нибудь знает, почему это может быть?

ответ

4

Изменение:

<select name="users" id='select-user'> 

в

<select name="users" id='select-user' multiple='multiple'> 

Это должно сделать рельсы ожидать, чтобы получить несколько значений выбора.

Весь раздел выбора, можно переписать с помощью вспомогательного помощника рельсов.

<select name="users" id='select-user'> 
    <option value="">Select at least one user</option> 
    <% User.all.each do |user| %> 
    <option value="<%= user.name %>"><%= user.name %></option> 
    <% end %> 
</select> 

становится

<%= select :user, options_for_collection_for_select(User.all, :name, :name), 
    { prompt: "Please select.." }, 
    { multiple: true } %> 

См http://guides.rubyonrails.org/v2.3.11/form_helpers.html#making-select-boxes-with-ease и http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html для более подробной информации.

Смежные вопросы