13

Rails 3のチェックボックスを使用して複数のレコードを削除するにはどうすればよいですか?

4

3 に答える 3

36

ルート.rb:

  resources :blog_posts do
    collection do
      delete 'destroy_multiple'
    end
  end

index.html.erb:

<%= form_tag destroy_multiple_blog_posts_path, method: :delete do %>
<table>
...
<td><%= check_box_tag "blog_posts[]", blog_post.id %></td>
...
</table>
<%= submit_tag "Delete selected" %>
<% end %>

blog_posts_controller.rb:

def destroy_multiple

  BlogPost.destroy(params[:blog_posts])

  respond_to do |format|
    format.html { redirect_to blog_posts_path }
    format.json { head :no_content }
  end

end
于 2012-10-03T16:21:09.237 に答える
5

テーブル内のレコードのリストを表示する場合、それぞれにチェックボックスがあり、チェックされたすべてのレコードを削除する削除ボタンがあります。

まず、レコードIDを含むチェックボックスの名前を作成する必要があります。これを行うには、次のようにします。

<%= check_box_tag("delete[#{@thing.id}]",1) %>

これにより、以下を含むHTMLが作成されます

 <input id='delete[1000]' type='checkbox' value='1' name='delete[1000]'>

したがって、フォームを投稿するときに、IDが1001および1002のレコードのチェックボックスをオンにすると、投稿には次の内容が含まれます。

"delete[1001]"=>"1"
"delete[1002]"=>"1"

したがって、コントローラー内でこれを行うことができます

params[:delete].each do |id|
  Thing.find(id.to_i).destroy
end
于 2012-10-03T16:13:36.930 に答える
1

コントローラでチェックされたすべての要素のIDを送信します。Fooクラスを削除するには、送信IDを削除する必要があると想定しています。

ids = params[:ids]
Foo.where("id in (#{ids}")).destroy

また

ids = params[:ids].split(",")
Foo.where(id => ids).destroy

依存関係がある場合は、destroyを使用し、deleteを使用しないでください。

于 2012-10-03T15:00:31.843 に答える