Как удалить опцию удаления из activeAdmin?

в rails gem active admin Я хочу удалить опцию удаления из default_actions, пока мне все еще нужно действие редактирования и отображения, есть ли способ сделать это?


person Kareem Hashem    schedule 12.10.2011    source источник


Ответы (5)


Вы добавляете вызов actions к каждому ресурсу Active Admin:

ActiveAdmin.register Foobar do
  actions :all, :except => [:destroy]
end
person Thomas Watson    schedule 12.10.2011

В какой-то момент у меня возникла такая проблема, из-за метода уничтожения кнопка «Удалить» не пропадала.

actions :all, except: [:destroy]

controller do
  def destroy # => Because of this the 'Delete' button was still there
    @user = User.find_by_slug(params[:id])
    super
  end    
end
person vladCovaliov    schedule 07.07.2014

Принятый ответ вызвал исключение «неправильное количество аргументов», поэтому я сделал это, чтобы исключить кнопку удаления (: действие уничтожить)

ActiveAdmin.register YourModel do
  actions :index, :show, :new, :create, :update, :edit

   index do

     selectable_column
     id_column
     column :title
     column :email
     column :name

    actions 
   end
person Means    schedule 29.04.2017

Другой способ удалить действия из default_actions для ресурса ActiveAdmin - использовать переменную config, например:

    ActiveAdmin.register MyUser do
      config.remove_action_item(:destroy)
      ...
    end

Один из способов уже упоминается в принятом ответе через метод actions.

person Manoj Sehrawat    schedule 12.03.2019

Если вы хотите полностью удалить кнопку удаления, используйте: actions: all, за исключением: [: destroy]

Но если для кнопки удаления требуется условие, основанное на свойствах ресурса (например, связанные данные или статус).

На индексной странице:

index do

    # ...

    actions defaults: false do |row|
      if can? :read, row
        text_node link_to "View", admin_resource_path(row), class: "view_link"
      end
      if can? :edit, row
        text_node link_to "Edit", admin_resource_path(row), class: "edit_link"
      end
      if can? :destroy, row
        text_node link_to I18n.t('active_admin.delete'), admin_resource_path(row), method: :delete, data: { confirm: I18n.t('active_admin.delete_confirmation') }, class: "delete_link" if row.deletable?
      end
    end

  end

Теперь сложная часть, и мне пришлось несколько раз ударить головой, чтобы контролировать ее на странице шоу:

config.remove_action_item (: destroy) # удалит кнопку уничтожения

только action_item:: показать делать

link_to I18n.t('active_admin.delete'), admin_resource_path(resource), method: :delete, data: { confirm: I18n.t('active_admin.delete_confirmation') }, class: "delete_link" if resource.deletable?

конец

Извините за ужасное форматирование.

person cool_php    schedule 09.10.2017