如何在rails 3.2中使用一个check_box_tag保存一对id?

时间:2014-06-08 19:42:58

标签: ruby-on-rails ruby-on-rails-3

表单(form_tag)上的一行中有两组id(id1和id2),表示要选择的id1和id2的一对可能组合。使用check_box_tag,可以将一个ID保存在这样的数组中:

<%= check_box_tag 'id_array[]', id1 %>

id_array以params [:id_array]中的数组形式返回。有没有办法可以用一个check_box_tag保存2个ID(只需要检查一次)?我们试过了:

<%= check_box_tag 'id_array[][]', id1, id2 %>

它不起作用。感谢。

更新:

这是一个实现的单个ID表单:

<%= form_tag mass_onboard_user_accesses_path, :method => :put do %>

  <tr>
     <th></th>
     <th><%= t('Engine Name') %></th>
     <th><%= t('Engine Desp') %></th>
  </tr>

<% @engines.each do |r| %>
  <tr>
    <% engine = Engine.find_by_id(r.resource_id)%>
    <td><%= check_box_tag 'id_array[]', r.resource_id %></td>
    <td><%= engine.name %></td>
    <td><%= engine.module_desp %></td>
  </tr>
<% end %>
      <tr>
        <th>
          <%= submit_tag t('Save') ,:name => "save[#{@project_id}]" %>
        </th>
      </tr>


<% end %>

2 个答案:

答案 0 :(得分:1)

我能想到的唯一方法就是作弊。我试图想一下如何在一个复选框中的ID集合映射到URL中的参数,但我没有。所以,作弊是假设所有params [:id_array]值都可能是一个字符串数组。

在您看来:

<%= check_box_tag 'id_arrays[]', [id1, id2].join(",") %>

在您的控制器中:

ids = []
params[:id_arrays].each do |sub_array|
  ids += sub_array.split(",")
end

或者是一种不那么冗长,可以说不太清晰的形式:

ids = params[:id_arrays].to_a.inject([]) {|c, id_array| c + sub_array.split(",") }

除非您将其封装在方法中:

def multiple_id_param(param_name)
  params[param_name].to_a.inject([]) do |c, id_array|
    c + id_array.split(",")
  end
end

ids = multiple_id_param(:id_array)

但是我完全明白,这是你试图通过用一些聪明的参数调用check_box_tag来避免的工作。我想这个答案归结为:&#34;我不认为你可以&#34;。

答案 1 :(得分:1)

虽然您的用例对我来说并不是绝对清楚,但这可能会有所帮助:

<% Outerloop.each do |o| %>
  <% Innerloop.each do |i| %>
    <%= checkbox_tag "id_array[#{o.id}][]", i.id %>
  <% end %>
<% end %>