表单(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 %>
答案 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 %>