是否可以在非基于ActiveRecord的模型上使用ActiveAdmin(比如activeModel或Mongoid等)?

Dar*_*inH 14 ruby activerecord activeadmin rails-activerecord

问题几乎说明了一切.

我有一个支持定义良好的API的现有站点.

我需要为它建立一个很好的管理界面,而且,由于我之前使用过ActiveAdmin创建效果,我很乐意在这里使用它.

但是,我找不到有关是否可以这样做的任何细节.

我读过评论说AA支持ActiveModel类型的对象,它们不一定要基于ActiveRecord,但我已经不用自己尝试了,或者找到了这样的例子.

任何人都知道这是否可能?

ben*_*ick 14

我能够通过使用ActiveAdmin自定义页面实现此目的.

在我们的例子,我们有一个叫做模型MailingList.这是一个包含一些ActiveModel功能的Ruby类.

# app/models/mailing_list.rb
class MailingList
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :name
  validates_presence_of :name

   def initialize(args)
     # Set up instance variables
   end

   def self.all
     # Use API to retrieve list of records
   end

   def save(args)
     # Use API to save record
   end

   def id
     # Unique identifier from API
   end

   def persisted?
     false
   end
end
Run Code Online (Sandbox Code Playgroud)

要在ActiveAdmin中使用此API驱动模型,我们创建一个这样的页面.

# app/admin/mailing_list.rb
ActiveAdmin.register_page 'Mailing Lists' do

  action_item do
     link_to 'New Mailing List', admin_mailing_lists_new_path
  end

  content do
    redirect_to :index
  end

  page_action :index do
    @mailing_lists = MailingList.all
    render :index, :layout => 'active_admin'
  end

  page_action :show do
    render :show, :layout => 'active_admin'
  end

  page_action :new do
    @mailing_list = MailingList.new
    render :new, :layout => 'active_admin'
  end

  page_action :create, :method => :post do
    @mailing_list = MailingList.new(params[:mailing_list])
    if @mailing_list.save
      redirect_to admin_mailing_list_path(@mailing_list.id)
    else
      render :new, :layout => 'active_admin'
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

这些page_action方法充当控制器动作.

为了让它按预期工作,我必须添加以下路由

# config/routes.rb
post '/admin/mailing_lists' => 'admin/mailing_lists#create'
get '/admin/mailing_lists/new' => 'admin/mailing_lists#new', :as => :admin_new_mailing_list
get '/admin/mailing_lists/:id' => 'admin/mailing_lists#show', :as => :admin_mailing_list
Run Code Online (Sandbox Code Playgroud)

你还需要一些观点

app/views/admin/mailing_lists/index.html.erb app/views/admin/mailing_lists/show.html.erb app/views/admin/mailing_lists/new.html.erb


nis*_*van 0

我还没有使用过,但它可能是一个起点: https: //github.com/elia/activeadmin-mongoid