Rails collection_select не отправляется в параметрах

У меня такое чувство, что где-то есть простая ошибка, но я не могу ее найти. У меня есть модель фильтра, и в ней _form.html.erb есть различные выборки и выборки коллекций. Когда нажата кнопка отправки, я использовал отладчик в контроллере и обнаружил, что в некоторых полях выбора значения не отправляются в параметрах. Вот код с вынутыми кнопками и другими неактуальными вещами:

<%= simple_form_for(@filter) do |f| %>
   <div class="inputs">
      <%= f.input :name %>
      <%= f.input :scope, :collection => ["Global", "Group", "Private"], :include_blank => false %><br>
      <p style="margin-left:190px;"><b>Users:</b></p>
      <div style="float: left; width: auto; margin-left: 190px;">
         <%= collection_select(:user, :id, User.all, :id, :full_name, {}, {:multiple => true, :size => 10}) %>
      </div>
      <%= select(:selected_users, :id, [], {}, {:size => 10, :style => "width:160px;", :multiple => true}) %>

      <p style="margin-left:190px;"><b>Positions:</b></p>
      <div style="float: left; width: auto; margin-left: 190px;">
         <%= collection_select(:position, :id, Position.all, :id, :name, {}, {:size => 10, :multiple => true}) %>
      </div>
      <div style="float: left; width: auto; margin-left: 60px; margin-top: -120px;">
         <%= collection_select(:selected_positions, :id, [], :id, :name, {}, {:size => 10, :style => "width:160px;", :multiple => true}) %>
      </div>

      <p style="margin-left:190px;"><b>States:</b></p>
      <%= select("selected_statuses", "status", ["Approved", "Pending", "Deny"], {}, {:multiple => true, :size => 3, :style => "margin-left:190px;"})%>
   </div>
<% end %>

В моих параметрах я получаю [:filter][:scope], [:filter][:name], [:user][:id], [:position][:id] и [:selected_statuses][:status] , но ни один из остальных. Почему выбор для выбранных статусов работает, а выбор для выбранных пользователей - нет? Или одна из позиций collection_selects, но не другая? Я очень смущен. И если это имеет значение, причина, по которой selected_users и selected_positions пусты, заключается в том, что параметры добавляются с помощью javascript.

РЕДАКТИРОВАТЬ: после javascript HTML (с опущенными ненужными битами)

<div class="inputs">
   <div class="input string optional">
      <label class="string optional" for="filter_name"> Name</label>
      <input id="filter_name" class="string optional" type="text" size="50" name="filter[name]" maxLength="255">
   </div>
   <div class="input select optional">
      <label class="select optional" for="filter_scope"> Scope</label>
      <select id="filter_scope" class="select optional" name="filter[scope]">
         <option value="Global">Global</option>
         <option value="Private">Private</option>
      </select>
   </div>
   <p style="margin-left:190px;">
      <b>Users:</b>
   </p>
   <div style="float: left; width: auto; margin-left: 190px;">
      <select id="user_id" size="10" name="user[id][]" multiple="multiple">
         <option value="2">Ethan Webworm</option>
         <option value="3">Matthew Barkbeetle</option>
         <option value="4">Sara Caterpillar</option>
         <option value="5">Olivia Daggermoth</option>
      </select>
   </div>
   <select id="selected_users_id" style="width:160px;" size="10" name="selected_users[id][]" multiple="multiple">
      <option value="2">Ethan Webworm</option>
      <option value="3">Matthew Barkbeetle</option>
      <option value="4">Sara Caterpillar</option>
   </select>

   <div style="float:left; width:auto; margin-left: 190px;>
      <select id="position_id" size="10" name="position[id][]" multiple="multiple">
         <option value="1">Manager</option>
         <option value="2">CEO</option>
         <option value="3">VP</option>
      </select>
   </div>
   <div style="float: left; width: auto; margin-left: 60px; margin-top: -120px;">
      <select id="selected_positions_id" style="width:160px;" size="10" name="selected_positions[id][]" multiple="multiple">
         <option value="1">Manager</option>
      </select>
   </div>

   <select id="selected_statuses_status" style="margin-left:190px;" size="3" name="selected_statuses[status][]" multiple="multiple">
      <option value="Approved">Approved</option>
      <option value="Pending">Pending</option>
      <option value="Deny">Deny</option>
   </select>
</div>

person Alexei    schedule 12.07.2012    source источник
comment
Можем ли мы увидеть результирующий HTML-код для :selected_users select после загрузки параметров с помощью Javascript?   -  person deefour    schedule 12.07.2012
comment
Конечно, я добавил HTML для соответствующих входных данных.   -  person Alexei    schedule 12.07.2012
comment
params[:selected_users][:id] нигде нет в params? Можете ли вы показать полный дамп params при отправке формы? У вас есть что-то вроде before_filter для очистки данных формы?   -  person deefour    schedule 12.07.2012
comment
Нет. Полный дамп параметров: {"positions"=>{"id"=>["1"]}, "commit"=>"Create Filter", "filter"=>{"scope"=>"Global", "name"=>"Blah"}, "action"=>"create", "selected_statuses"=>{"status"=>["Approved", "Pending"]}, "controller"=>"filters", "user"=>{"id"=>["2"]}} Таким образом, он получает выбор из полей user_id и position_id, но по какой-то причине игнорирует поля selected_users и selected_positions.   -  person Alexei    schedule 13.07.2012


Ответы (1)


Я только что нашел решение, которое действительно было простой досадной ошибкой... Причина, по которой выбранные пользователи/позиции не отправлялись в параметрах, заключалась в том, что, хотя параметры были добавлены в поле в javascript, они на самом деле не были < em>выбрано. Теперь мне просто нужно найти способ выбрать все параметры перед отправкой формы. Спасибо за помощь!

person Alexei    schedule 12.07.2012
comment
Рад, что ты разобрался. Вы можете принять свой собственный ответ :) - person deefour; 13.07.2012