16

问题几乎说明了一切。

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

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

但是,我找不到任何关于这样做是否可能的细节。

我读过评论说 AA 支持 ActiveModel 类型的对象,这些对象不必基于 ActiveRecord,但我自己并没有尝试过,也没有找到任何类似的例子。

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

4

5 回答 5

18

我能够通过使用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

为了在 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

这些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

您还需要一些视图

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

于 2014-07-25T14:50:57.917 回答
1

ActiveAdmin 是为与 ActiveRecord 一起工作而编写的,默认情况下它不支持其他 ORM。但是,有一些插件可用于添加对某些插件的支持。这是我发现的两个:

于 2014-07-24T12:42:38.587 回答
1

这里有这个问题的有用答案。简而言之,需要在 ActiveRecord 适配器所在的链接上查看 rails db 适配器的来源(当前位于路径 rails/activerecord/lib/active_record/connection_adapters/) 。尤其是看到并拿abstract_adapter.rb来实现。

于 2016-04-05T15:34:14.547 回答
0

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

于 2014-07-18T09:01:29.093 回答
0

当我们说,在跨 ORM 上使用任何 gem 时,最重要的部分是该特定 gem 是否支持其他 ORM。

对于 Active Admin,我可以猜测的是,他们计划通过设计支持 ActiveRecord 和 Mongoid。从代码库本身,您可以看到它https://github.com/gregbell/active_admin/tree/master/lib/active_admin/orm。但不知何故,他们无法完成它。

此外,如果您计划使用 Mongoid 作为您的主要 ORM(使用 mongoDB),管理框架还有一些其他选项。

但是要回答您的问题,不,您不能将 ActiveAdmin 与 Mongoid 一起使用。相反,您可以查看https://github.com/elia/activeadmin-mongoid(如上面评论中所述)

于 2014-07-21T08:01:20.263 回答