4

如何传递数组的值?选中的复选框。

在视图中:

= 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"
4

2 回答 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 做任何事情

仅供参考:http: //railscasts.com/episodes/165-edit-multiple?view=asciicast

更新(一个小问题)

从这里:http ://railscasts.com/episodes/17-habtm-checkboxes?view=asciicast

我们的更新方法还有一个小问题。如果我们取消选中所有复选框以从所有类别中删除产品,则更新无法删除该产品所在的任何类别。这是因为如果未选中 HTML 表单上的复选框,则不会将其值发回,因此不会category_ids将出现在产品的参数散列中,表示category_ids没有更新。

为了解决这个问题,我们必须修改我们的产品控制器以将category_ids参数设置为一个空数组,如果它没有传递给更新操作。我们可以使用Ruby's ||=运算符来执行此操作,并在更新操作的顶部添加以下内容。

params[:product][:category_ids] ||= []

这将确保如果未选中任何复选框,则产品会正确更新,使其不属于任何类别。

于 2012-08-15T07:07:54.573 回答
1

您需要在表单标签周围添加按钮标签。您不能使用link_to.

于 2012-08-15T07:02:59.273 回答