【问题标题】:Rails collection_select not being sent in paramsRails collection_select 未在参数中发送
【发布时间】:2012-07-12 04:09:53
【问题描述】:

我感觉某处只是一个简单的错误,但我一生都找不到它。我有一个过滤器模型,在它的 _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>

【问题讨论】:

  • 我们能否看到:selected_users select 您使用 Javascript 加载选项后生成的 HTML?
  • 当然,我为相关输入添加了 HTML。
  • params[:selected_users][:id] 不在params 中?您可以在提交表单时显示params 的完整转储吗?您是否设置了类似before_filter 来清理表单数据?
  • 不是。参数的完整转储是 {"positions"=&gt;{"id"=&gt;["1"]}, "commit"=&gt;"Create Filter", "filter"=&gt;{"scope"=&gt;"Global", "name"=&gt;"Blah"}, "action"=&gt;"create", "selected_statuses"=&gt;{"status"=&gt;["Approved", "Pending"]}, "controller"=&gt;"filters", "user"=&gt;{"id"=&gt;["2"]}} 所以它从 user_id 和 position_id 框中获取选择,但由于某种原因忽略了 selected_users 和 selected_positions 框。

标签: html ruby-on-rails ruby forms simple-form


【解决方案1】:

我刚刚发现了解决方案,这确实是一个简单的尴尬错误t 实际上被选中。现在我只需要在发送表单之前找到一种方法来选择所有选项。感谢您的帮助!

【讨论】:

  • 很高兴你把它整理好了。你可以接受你自己的答案:)
猜你喜欢
  • 2015-02-06
  • 2016-04-02
  • 1970-01-01
  • 2014-05-28
  • 2012-10-06
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多