Переопределить действия в ActiveAdmin - PullRequest
0 голосов
/ 07 февраля 2019

ActiveAdmin позволяет использовать метод actions , который добавляет представление, редактирование и удаление в представление индекса.

Я переопределяю это в каждом представлении индекса следующим образом:

  actions defaults: false do |word|
      item "View", admin_word_path(word), class: 'edit_link member_link'
  end

Это прекрасно работает, но я хотел бы просто иметь глобальное переопределение для всех представлений индекса, которое не требует от меня написания этого кода для каждого.

Как бы я это сделал?

1 Ответ

0 голосов
/ 07 февраля 2019

Один из способов - динамически открыть класс 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.

Удачи!

...