ActiveAdmin:如何将格式化程序添加到具有特定名称的任何列?

ActiveAdmin: how to add formatter to any column with specific name?

我有一个名为 ip_with_location 的助手,它将 10.10.10.10 转换为 10.10.10.10 - DE, Berlin 形式。

用法示例:

index do
  ...
  column :ip do |r|
    ip_with_location(r.ip)
  end
end

问题是:有没有办法用我的自定义助手自动格式化列值?

所以我只写column :ip

在模型级别覆盖 ip getter 不是一个选项,因为我只希望在 ActiveAdmin

中使用这种格式

ActiveAdmin 没有为此构建的方法。

  1. 您可以在您的模型上构建一个 ip_with_location 方法并在 Admin
  2. 中使用它
  3. 你可以给我们一个Decorator
  4. 你可以写一个'template'

    # app/admin/ip_column.rb
    require "active_admin/views/index_as_table"
    module ActiveAdmin
      module Views
        class IndexAsTable < ActiveAdmin::Component
          class IndexTableFor < ::ActiveAdmin::Views::TableFor
            def ip_column
              column :ip do |r|
                ip_with_location(r.ip)
              end
            end
          end
        end
      end
    end
    
    # app/admin/user.rb
    require "ip_column"
    index do
      id_column
      column :name
      ip_column
    end