ActiveAdmin - 如何删除所有对象(不仅是当前列表页面上的对象)(Rails ')

ActiveAdmin - how to delete ALL objects (not only those on current list page) (Rails ')

在我的 ruby Rails 应用程序中使用 ActiveAdmin,我不仅希望删除显示的 30 个用户,而且希望删除所有 456 个用户(这当然是一个例子)。

当我select“select所有”然后确认删除时,它只会删除当前屏幕页面上可见的30个用户。

我想 select 所有用户(跨所有视图页面,不仅是我当前看到的那个),然后手动删除 select 前 4 个用户(或我会手动选择的任何用户)在当前视图页面上)。所以并没有真正删除所有用户。那是我的问题。

如何自定义 ActiveAdmin 才能执行此操作?

您可以像这样覆盖 destroy/delete 所有用户的默认批处理操作:

ActiveAdmin.register User do
  batch_action :destroy do |ids|
    User.delete_all
    redirect_to collection_path, alert: "Deleted all the Users!"
  end
end

有关详细信息,请参阅 this

如果你想从所有用户列表中删除一些用户,我建议你写一个custom active admin action。最小化您的标记,使其易于为浏览器呈现并为最坏的情况做好准备。如果你有 100 万条记录,它就无法正常工作,没有解决方案。

我建议您接受用户将通过搜索删除记录的事实,如果您真的希望能够删除 全部,您可以提供一个自定义按钮 删除所有会为你做的。

另一种方法是编写一个包含大量 javascript 的自定义活动管理操作以提供分页。还是很多自定义代码,没有提供通用的解决方案。

最后一个选择,您可以禁用该活动管理页面的分页,但每次加载整个 table 时可能会遇到很多问题

也许这样的事情会奏效:

https://github.com/activeadmin-plugins/active_admin_scoped_collection_actions

ActiveAdmin 插件。为所有页面的 scoped_collection(过滤器 + 范围)提供批量更新和删除。