是否有人想出如何使用RailsAdmin或ActiveAdmin或其他类似引擎使用ActiveResource。
看起来两个项目还没有此功能(https://github.com/activeadmin/activeadmin/issues/26,https://github.com/sferik/rails_admin/issues/1355)。另一方面,这是一个相当普遍的情况,当你有数据驻留在其他服务/应用程序(在数据库中)时,我想知道是否有人一起攻击它。
我尝试在ActiveResource资源周围创建ActiveRecord包装器。但是,它超出了我对ActiveRecord(可能是Ruby)的了解。
答案 0 :(得分:3)
AA示例(使用提交802dc451f3b3bd84e736b512d554867c0f2ae011进行测试)
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