Один из способов - динамически открыть класс IndexTableFor
в module ActiveAdmin
.Рискованно, потому что это может в конечном итоге порвать с обновлениями ActiveAdmin.вставьте следующий фрагмент в конец файла config/initializers/active_admin.rb
.Я проверил это с помощью activeadmin 1.1, rails 5.1 и ruby 2.4.2, и оно работает.
module ActiveAdmin
module Views
class IndexAsTable < ActiveAdmin::Component
class IndexTableFor < ::ActiveAdmin::Views::TableFor
def defaults(resource, options = {})
if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}", title: I18n.t('active_admin.view')
end
if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: I18n.t('active_admin.edit')
end
if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}", title: I18n.t('active_admin.delete'),
method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
end
end
end
end
Теперь вы можете настроить его так, как вам бы хотелось.Не забудьте перезапустить ваш сервер rails, так как это initializer
.
Удачи!