в rails gem active admin Я хочу удалить опцию удаления из default_actions, пока мне все еще нужно действие редактирования и отображения, есть ли способ сделать это?
Как удалить опцию удаления из activeAdmin?
Ответы (5)
Вы добавляете вызов actions
к каждому ресурсу Active Admin:
ActiveAdmin.register Foobar do
actions :all, :except => [:destroy]
end
В какой-то момент у меня возникла такая проблема, из-за метода уничтожения кнопка «Удалить» не пропадала.
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
Принятый ответ вызвал исключение «неправильное количество аргументов», поэтому я сделал это, чтобы исключить кнопку удаления (: действие уничтожить)
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
Другой способ удалить действия из default_actions для ресурса ActiveAdmin
- использовать переменную config
, например:
ActiveAdmin.register MyUser do
config.remove_action_item(:destroy)
...
end
Один из способов уже упоминается в принятом ответе через метод
actions
.
Если вы хотите полностью удалить кнопку удаления, используйте: 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?
конец
Извините за ужасное форматирование.