带有RailsAdmin或ActiveAdmin的ActiveResource



有人知道如何将ActiveResource与RailsAdmin或ActiveAdmin或其他类似引擎一起使用吗。

看起来这两个项目都还没有这个功能(https://github.com/activeadmin/activeadmin/issues/26,https://github.com/sferik/rails_admin/issues/1355)。另一方面,当您的数据驻留在其他服务/应用程序(与DB中的数据相比)中时,这是相当常见的情况,我想知道是否有人将其一起入侵。

我试图围绕ActiveResource资源创建ActiveRecord包装器。然而,这超出了我对ActiveRecord(可能还有Ruby)的了解。

AA示例(使用commit 802dc451f3bd84e736b512d554867c0f2ae011测试)

ActiveAdmin.register Payment do
  actions :index
  config.batch_actions = false
  filter :created_at_gteq, as: :date_time_picker
  controller do  
    def find_collection
      @search = OpenStruct.new(params[:q] || {})
      result = Payment.find(:all, params: {
                order: params.fetch(:order, 'created_at_desc'),
                page: params.fetch(:page, 1),
                per_page: params.fetch(:per_page, 50),
                q: params[:q] || {}
              })
      #this uses https://github.com/Fivell/activeresource-response,
      # but can be replaced with other  ActiveResource pagination implementation
      limit = result.http_response['X-Limit-Value'].to_i
      offset = result.http_response['X-Offset-Value'].to_i
      total = result.http_response['X-Total-Count'].to_i
      Kaminari.paginate_array(result, limit: limit, offset: offset, total_count: total)
    end
  end    
end

型号

class Payment <  MyActiveResource
  schema do
    attribute 'customer_id', :integer
    attribute 'amount', :integer
    attribute 'created_at', :string
    attribute 'success', :boolean
  end
  def self.column_names
    content_columns
  end
  def self.content_columns
    if @content_columns.nil?
      @content_columns = Array.new
      known_attributes.each do |name|
        @content_columns << ResourceColumn.new(name)
      end
    end
    @content_columns
  end
  def self.columns
    content_columns
  end
  class ResourceColumn
    attr_reader :name
    def initialize(name)
      @name = name
    end
    def type
      :string
    end
  end
end

补丁

module ActiveAdmin
  module Filters
    module FormtasticAddons
      alias :old_seems_searchable? :seems_searchable?
      def seems_searchable?
        return false if ransacker?
        old_seems_searchable?
      end
      def klass
        @object.try(:object).try(:klass)
      end
      def ransacker?
        klass.try(:_ransackers).try(:key?, method.to_s)
      end
      def scope?
        context = Ransack::Context.for klass rescue nil
        context.respond_to?(:ransackable_scope?) && context.ransackable_scope?(method.to_s, klass)
      end
    end
  end
end
module ActiveAdmin
  module Helpers
    module Collection
      def collection_size(c = collection)
        if c.is_a? ActiveRecord::Relation
          c = c.except :select, :order
          c.group_values.present? ? c.count.count : c.count
        else
          c.respond_to?(:count) ? c.count : 0
        end
      end
    end
  end
end

最新更新