将 `if` 条件添加到 ActiveAdmin batch_batch 销毁操作,否则使用默认操作行为

Add `if` condition to ActiveAdmin batch_batch destroy action but use default action behavior otherwise

我正在尝试添加默认 ActiveAdmin :destroy 批处理操作的条件显示,以便该选项仅根据用户角色显示。问题是将 if 属性 添加到 batch_action 方法调用似乎禁用了默认行为,而是依赖于一个块。例如:

batch_action :destroy, if: proc { authorization_logic_here }

正确地 shows/hides 基于用户角色的批处理操作,但如果显示该操作,它不会执行任何操作。我可以提供一个块,其中包含有关如何处理销毁请求的说明,但我不想每次需要这样做时都不必重新发明轮子。有没有办法告诉 batch_action 调用有条件地显示,否则使用 :destroy 操作的默认行为?

我认为这是不可能的。您将必须自己实施销毁。这是一个例子:

batch_action :destroy, confirm: 'Beware', if: proc { true } do |ids|
  q = resource_class.where(id: ids).map(&:destroy)
  redirect_to collection_path, notice: "#{q.count} destroyed"
end