问题几乎说明了一切。
我有一个支持定义良好的API的现有网站。
我需要为它建立一个很好的管理界面,而且,由于我之前使用过ActiveAdmin创建效果,我很乐意在这里使用它。
但是,我找不到有关是否可以这样做的任何细节。
我读过评论说AA支持ActiveModel类型的对象,它们不一定要基于ActiveRecord,但是我已经不用自己尝试了,或者找到了这样的例子。
任何人都知道这是否可能?
答案 0 :(得分:13)
我可以使用ActiveAdmin custom page来实现这一目标。
对于我们的示例,我们有一个名为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
答案 1 :(得分:1)
编写ActiveAdmin以使用ActiveRecord,默认情况下它不支持其他ORM。但是,有一些插件可用于添加对某些插件的支持。以下是我发现的两个:
答案 2 :(得分:1)
这个问题的有用答案here。简而言之,需要在ActiveRecord适配器所在的this link处查看rails db adapter(当前位于path rails / activerecord / lib / active_record / connection_adapters /)的源代码。特别是要查看并使用abstract_adapter.rb来实现。
答案 3 :(得分:0)
我还没有用过,但它可能是一个起点:https://github.com/elia/activeadmin-mongoid
答案 4 :(得分:0)
当我们说使用任何宝石而非跨越ORM时,最重要的部分是该特定宝石是否支持其他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(如上面评论中所述)