gpt4 book ai didi

ruby-on-rails - ActiveAdmin - 如何在自定义操作中呈现默认模板

转载 作者:行者123 更新时间:2023-12-03 16:20:48 24 4
gpt4 key购买 nike

我们在 Rails3 应用程序中使用 ActiveAdmin 作为默认模型。现在我们需要覆盖 show Action 。 OrderProcess 模型是一个 transient (无表)模型,这意味着所有字段都是从其他数据聚合而来的。我们使用一个内部模块,该模块提供必要的方法来模拟 ActiveAdmin 所依赖的 MetaSearch 方法。以下是我们如何覆盖 show Action :

ActiveAdmin.register OrderProcess do  
member_action :show, :method => :get do
@order_process = OrderProcess.all_orders_for_deal(params['id'])
end
end

这给了我们一个错误,提示缺少模板“缺少模板 admin/order_processes/show with ...”

我们也试着打电话
  render renderer_for(:show)

但这产生了关于缺少方法 model_name 的错误,这可能是由于我们的模型是无表的并且相关模块。

我们如何使用 ActiveAdmins 内置的渲染方法来显示我们的模型?任何帮助表示赞赏。

最佳答案

activeadmin 文档对如何覆盖标准 Controller 操作的细节非常简单,考虑到源代码的不透明性,这令人沮丧。 gem 中的许多内部结构似乎在 1.0 版中发生了很大变化,这使得许多旧的 Stack Overflow 答案无法使用。

无论如何,这就是我上面如何覆盖我的activeadmin Controller 中的#create操作(在Rails 4.2.x上):

  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

值得注意的是,如果您的模型是用户,activeadmin 期望创建操作在渲染 action => :new 之前将填充模型实例作为@user。 .

我将自定义 create 方法的内部编写为模型上的类方法,因此我可以对其进行单元测试并在我的 activeadmin 代码中尽可能少地隐藏代码。

就上下文而言,我需要覆盖此操作,因为我正在使用 Devise,并且我想让我的管理员使用临时密码和自定义欢迎电子邮件创建用户帐户,而不是内置的 :confirmable 电子邮件用于自行创建的帐户。

这是 User 类方法:
  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

关于ruby-on-rails - ActiveAdmin - 如何在自定义操作中呈现默认模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com