在Ruby on Rails中选择复选框并通过数组传递。

5

我该如何传递所选复选框数组的值?

在视图中:

= check_box_tag 'user_message_ids[]', user_message.id, false

= link_to "<button>Bulk Delete</button>".html_safe, profile_message_path(user_message), :id => 'user_message_ids', :confirm => "Are you sure?", :method => :delete

我可以将提交按钮放在这些区域中的任何一个吗?

比如这个:

= form_tag checked_messages_path do
  = check_box_tag 'user_message_ids[]', user_message.id, false
--------objects---------------------------------------------
--------objects---------------------------------------------
--------objects---------------------------------------------
--------objects---------------------------------------------
= submit_tag "Delete Checked"
2个回答

20
使用 form_tag 块。
<% form_tag delete_mutiple_items_path do %>
  <table>
    <thead>
      <tr>
        <th></th>
      </tr>
    </thead>
    <tbody>
      <% @items.each do |item| %>
      <tr>
        <td><%= check_box_tag "items[]", item.id %></td>
      </tr>
      <% end %>
    </tbody>
  </table>
  <%= submit_tag "delete Checked" %>
<% end %>
它将向控制器传递id数组,例如{"item_ids[]" => ["1", "2", "3"]}。因此,您可以对这些id执行任何操作。请注意,如果您取消选中所有复选框以从所有类别中删除产品,则更新失败,并且不会删除产品所在的任何类别。为了解决这个问题,我们必须修改产品控制器,如果未将category_ids参数传递给update操作,则将其设置为空数组。我们可以使用Ruby的||=运算符来实现这一点,并在更新操作的顶部添加以下内容:params[:product][:category_ids] ||= []。这将确保如果没有复选框被选中,则产品将被正确更新为不属于任何类别。FYI: http://railscasts.com/episodes/165-edit-multiple?view=asciicast。更多信息,请参见http://railscasts.com/episodes/17-habtm-checkboxes?view=asciicast

谢谢,我认为这可能会对我有所帮助。上帝保佑。 - user1597745
全选和取消全选复选框的建议? - user1597745
我看到一个问题,就是如果没有选择任何 check_box,那么更新将不会修改实体,因为 array param 将不会被发送。 - fguillen

1

您需要在表单标签周围添加按钮标签。您不能使用link_to提交输入标签数据。


但我需要将按钮放置在对象的顶部,但它不起作用...还有什么建议吗? - user1597745

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接