Rails 3のチェックボックスを使用して複数のレコードを削除するにはどうすればよいですか?
質問する
12400 次
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 に答える