除了基本的CRUD,用户如何更新或删除许多记录?

时间:2018-06-29 05:47:43

标签: ruby-on-rails crud bulkupdate

我有一个非常典型的Rails应用,其中大量使用了CRUD。.但我们知道,它们始终与模型中的单个记录直接相关。

多次更新:即“标记为已存档”

在我的controller#index视图上,我希望能够允许用户以特定方式批量删除或批量更新记录。

这类似于Gmail,在Gmail中,您可以在列表中选择多封电子邮件,然后从工具栏菜单中选择change labelmove

在Rails中有实现该目标的模式吗?

enter image description here

我知道我可以使用SQL或ActiveRecord查询删除任何想要的内容。我更担心控制器和路由的外观,以及是否已经有一种模式。

3 个答案:

答案 0 :(得分:3)

您可以在单个请求中添加用于处理多个记录(例如,帖子)操作的新路线:

进行如下更改:

# config/routes.rb
resources :posts do
  collection do
    put :bulk_update
    delete :bulk_destroy
  end
end

除了常规的CRUD路由外,还将添加以下新路由:

bulk_update_posts     PUT       /posts/bulk_update(.:format)       posts#bulk_update
bulk_destroy_posts    DELETE    /posts/bulk_destroy(.:format)      posts#bulk_destroy

现在,为相同的对象添加相应的控制器操作:

# app/controllers/posts_controller.rb
before_action :fetch_posts, only: [:bulk_update, :bulk_destroy]

def bulk_update
  @posts.update_all(permitted_params)
  redirect_to posts_path
end

def bulk_destroy
  @posts.destroy_all
  redirect_to posts_path
end

private

def fetch_posts
  @posts = Post.where(id: params[:post_ids])
end

def permitted_params
  # Decide for yourself
end

答案 1 :(得分:1)

您可以对多个记录执行各种CRUD操作,还可以在其中传递选定记录的ID的条件下,该条件将返回ActiveRecord对象的集合,并且可以对该集合执行多个更新,删除多个。

User.where(:id =>[23,45,68,123]).update_all(:is_active => true)
User.where(:id =>[23,45,68,123]).destroy_all

答案 2 :(得分:0)

您可以将ids的列表传递到后端,然后执行User.where(id: [1,2,3]).destroy_all