Ruby on rails ActiveAdmin-如何在自定义操作中呈现默认模板
我们在Rails3应用程序中为默认模型使用ActiveAdmin。现在我们需要覆盖显示操作。OrderProcess模型是一个瞬态(无表)模型,这意味着所有字段都是从其他数据聚合而来的。我们使用一个内部模块,提供必要的方法来模拟ActiveAdmin所依赖的元搜索方法。以下是覆盖“显示”操作的方式:Ruby on rails ActiveAdmin-如何在自定义操作中呈现默认模板,ruby-on-rails,admin,Ruby On Rails,Admin,我们在Rails3应用程序中为默认模型使用ActiveAdmin。现在我们需要覆盖显示操作。OrderProcess模型是一个瞬态(无表)模型,这意味着所有字段都是从其他数据聚合而来的。我们使用一个内部模块,提供必要的方法来模拟ActiveAdmin所依赖的元搜索方法。以下是覆盖“显示”操作的方式: ActiveAdmin.register OrderProcess do member_action :show, :method => :get do @order_proc
ActiveAdmin.register OrderProcess do
member_action :show, :method => :get do
@order_process = OrderProcess.all_orders_for_deal(params['id'])
end
end
这给了我们一个错误,抱怨缺少模板“缺少模板管理/订单处理/显示…”
我们也试着打电话
render renderer_for(:show)
但是,这产生了一个关于缺少方法model_名称的错误,这可能是由于我们的模型是无表的,并且模块是相关的
我们如何使用ActiveAdmins内置的呈现方法来显示我们的模型?非常感谢您的帮助。我也有同样的问题:(
我正在尝试覆盖更新操作并尝试呈现“编辑操作”
member_action :update, :method => :post do
if params[:user][:password].blank?
[:password, :password_confirmation, :current_password].collect{|p| params[:user].delete(p) }
end
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to([:admin, @user]) }
else
format.html { render renderer_for(:edit) }
end
end
end
在会议上提到的解决方案有效:
我遇到了一个类似的问题,我需要覆盖更新操作的默认活动管理控制器行为。我让它这样工作:
controller do
def update
@model = Model.find(params[:id])
# do stuff
if @model.save
redirect_to admin_model_path(@model)
else
render :edit
end
end
end
键是render:edit
,它将呈现活动管理员已经定义的默认编辑页面
另一个解决方案是使用
render active_admin_template('edit.html.arb'), :layout => false
不适用于我或(:edit)的任何其他
渲染器组合刚刚遇到此问题…Grant的评论是正确的,活动管理模板
不再存在(我在1.0.0-pre2上)
我最终选择了:
render:action=>:edit,:layout=>false
虽然您必须为标题提供一个标签,该标签显示为“translation missing:en.active\u admin.[your\u action]\u model”,但这似乎是可行的activeadmin文档对如何覆盖标准控制器操作的细节非常清晰,考虑到源代码的不透明性,这一点令人沮丧。gem中的许多内部构件似乎在1.0版中发生了大量变化,这使得许多旧的堆栈溢出答案无法使用
无论如何,下面是我如何在我的activeadmin控制器(在Rails 4.2.x上)中重写#create操作的:
值得注意的是,如果您的模型是User,那么activeadmin希望create操作在呈现action=>:new
之前将填充的模型实例作为@User
我在模型上以类方法的形式编写了自定义create方法的内部构件,以便对其进行单元测试,并在activeadmin代码中尽可能少地嵌入代码
在上下文中,我需要覆盖此操作,因为我使用的是Desive,我想让管理员使用临时密码和自定义欢迎电子邮件创建用户帐户,而不是为自己创建的帐户创建内置的:可确认电子邮件
下面是该用户类方法:
def self.create_from_admin(params)
generated_password = Devise.friendly_token.first(8)
@user = User.new(params)
@user.password = generated_password
@user.skip_confirmation!
if @user.save
# Code to send custom email with temp password
end
@user
end
为什么要为更新创建成员操作?更新包含在标准curd方法中,因此请尝试在控制器中覆盖它,例如控制器do def update#您的更改结束端可能在最近的版本中发生了更改。我得到了未定义的方法“active\u admin\u template”
如何:呈现“admin/*resource\u name*/*view\u name*“,:layout=>false
要为标题提供标签,请使用@page_title=“Lable”。这不再有效(1.2.1)。视图呈现时根本没有任何布局。
controller do
def create
@user = User.create_from_admin(permitted_params[:user])
if @user.persisted?
redirect_to resource_path(@user), notice: I18n.t("admin.user.create.notice")
else
render :action => :new
end
end
end
def self.create_from_admin(params)
generated_password = Devise.friendly_token.first(8)
@user = User.new(params)
@user.password = generated_password
@user.skip_confirmation!
if @user.save
# Code to send custom email with temp password
end
@user
end