覆盖 ActiveAdmin 中的操作
Override actions in ActiveAdmin
ActiveAdmin 允许使用 actions 方法,该方法向索引视图添加查看、编辑和删除。
我在每个索引视图上用这样的东西覆盖它:
actions defaults: false do |word|
item "View", admin_word_path(word), class: 'edit_link member_link'
end
这很好用,但我只想对所有索引视图进行全局覆盖,这不需要我为每个视图编写此代码。
我该怎么做?
一种方法是在module ActiveAdmin
中动态打开IndexTableFor
class。有风险,因为这最终可能会破坏 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
.
祝你好运!
ActiveAdmin 允许使用 actions 方法,该方法向索引视图添加查看、编辑和删除。
我在每个索引视图上用这样的东西覆盖它:
actions defaults: false do |word|
item "View", admin_word_path(word), class: 'edit_link member_link'
end
这很好用,但我只想对所有索引视图进行全局覆盖,这不需要我为每个视图编写此代码。
我该怎么做?
一种方法是在module ActiveAdmin
中动态打开IndexTableFor
class。有风险,因为这最终可能会破坏 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
.
祝你好运!