Добавьте условие «если» в действие ActiveAdmin batch_batch для уничтожения, но в противном случае используйте поведение по умолчанию

#ruby-on-rails #ruby #activeadmin

Вопрос:

Я пытаюсь добавить условное отображение пакетного действия ActiveAdmin :уничтожить по умолчанию, чтобы опция отображалась только в зависимости от роли пользователя. Проблема в том, что добавление if свойства в batch_action вызов метода, по-видимому, отключает поведение по умолчанию и вместо этого полагается на блок. Например:

 batch_action :destroy, if: proc { authorization_logic_here }
 

правильно показывает/скрывает пакетное действие в зависимости от роли пользователя, но если действие отображается, оно ничего не делает. Я могу предоставить блок с инструкциями о том, как обрабатывать запрос на уничтожение, но я бы предпочел не изобретать колесо каждый раз, когда мне это нужно. Есть ли способ указать batch_action вызову на условное отображение, но в противном случае использовать поведение по умолчанию для :destroy действия?

Ответ №1:

Я не думаю, что это возможно. Вам придется осуществить разрушение самостоятельно. Вот пример:

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