问题几乎说明了一切。
我有一个支持定义良好的 API 的现有站点。
我需要为它建立一个很好的管理界面,而且由于我之前使用过 ActiveAdmin 来创建效果,所以我很想在这里使用它。
但是,我找不到任何关于这样做是否可能的细节。
我读过评论说 AA 支持 ActiveModel 类型的对象,这些对象不必基于 ActiveRecord,但我自己并没有尝试过,也没有找到任何类似的例子。
任何人都知道这是否可能?
问题几乎说明了一切。
我有一个支持定义良好的 API 的现有站点。
我需要为它建立一个很好的管理界面,而且由于我之前使用过 ActiveAdmin 来创建效果,所以我很想在这里使用它。
但是,我找不到任何关于这样做是否可能的细节。
我读过评论说 AA 支持 ActiveModel 类型的对象,这些对象不必基于 ActiveRecord,但我自己并没有尝试过,也没有找到任何类似的例子。
任何人都知道这是否可能?
我能够通过使用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
ActiveAdmin 是为与 ActiveRecord 一起工作而编写的,默认情况下它不支持其他 ORM。但是,有一些插件可用于添加对某些插件的支持。这是我发现的两个:
我还没用过,但它可能是一个起点:https ://github.com/elia/activeadmin-mongoid
当我们说,在跨 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(如上面评论中所述)