ruby on rails:如何从提交的表单中获取选择框中的项目列表

时间:2009-12-21 23:12:23

标签: ruby-on-rails

我在表单中有一个多选框。使用DOM(例如http://www.digimantra.com/tutorials/add-append-remove-value-in-select-html-element-using-javascript/)从javascript添加/删除此选择框中的元素。 我想在提交表单时获取控制器内部选择框中的所有元素。

有没有简单的方法呢?

感谢。

1 个答案:

答案 0 :(得分:2)

表单提交中不保留选择框中可能的选项列表,仅发送选定的选项。

在提交时在选择框中发送选项列表的唯一方法是添加/删除列出选项/值的隐藏标签。

如果你通过添加带有Javascript的选项子项来更新select DOM元素,那么你应该有更多的东西。只需添加或删除列表中的选项的javascript添加或删除表单中的隐藏字段。

IE:

假设由此部分创建的表单:

<% from_for @user do |f| %>
  <%=f.collection_select :selected_values, Values.all, :id, :name %>
  <% Values.all.each do |v| %>
  <%= hidden_field_tag "user[select_options][#{v.name}]", v.id %>
<% end %>

<%= link_to_function "Add Twenty option",
   '$("select").insert(bottom: "<option value=\"20\">twenty</option>");
    $("form").insert(bottom: "<input type="hidden\" id=\"user_select_options_twenty\" 
      name=\"user[select_options][twenty]\" value=\"20\">"' 
%>

<%= link_to_function "Remove Twenty option", 
   '$("select").select(\'[value="twenty"]\').remove(); 
    $("#user_select_options_twenty").remove()' 
%>

假设您在页面加载时填充初始select语句的隐藏值,则在提交时,params [:user] [:select_options]将包含所有可用选项的哈希值。此哈希中的键是显示的选项,哈希值是这些选项的值。

注意:发布的代码未经测试。这可能不对,但它足以让你走上正确的轨道。