2012-07-12 39 views
0

我有一种感觉,只是一个简单的错误,但对于我的生活我找不到它。我有一个过滤器模型,它的_form.html.erb中有各种选择和集合选择。当点击提交按钮时,我已经使用了控制器内的调试器,发现有几个选择框没有在params中发送它们的值。下面是使用按钮和其他不相干的事情代码取出:Rails的collection_select没有被发送参数

<%= 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 %> 

在我的PARAMS我得到[:过滤器] [:范围],[:过滤器] [:名字],[:用户] [: id],[:position] [:id]和[:selected_statuses] [:status],但没有其他的。为什么所选状态的选择工作,而选定用户的选择不是?或者其中一个位置collection_select而不是另一个?我很困惑。如果这很重要,那么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> 
+0

我们可以在用Javascript添加选项之后看到':selected_users'选择**的结果HTML吗? – deefour 2012-07-12 04:19:43

+0

当然,我为相关输入添加了HTML。 – Alexei 2012-07-12 16:17:56

+0

'params [:selected_users] [:id]'在'params'中无处?当表单提交时,你能否显示完整的'params'转储?你有没有像'before_filter'设置来清理表单数据? – deefour 2012-07-12 17:42:29

回答

0

我只是找到了解决办法,这确实是一个简单的令人尴尬的错误...选定的用户/位置间没有”的原因t正在发送的参数只是当选项被添加到JavaScript中的框,他们实际上并不是选中。现在我只需要在发送表单之前找到一种方法来选择所有选项。谢谢您的帮助!

+0

很高兴你把它整理出来。你可以接受你自己的回答:) – deefour 2012-07-13 00:27:51