首页 > 解决方案 > 在 Active Admin 中使用自定义方法自定义 action_item

问题描述

我在 Active Admin 中有一个嵌套资源,它显示特定 SupportAllocation(定义教师-学生关系)的所有 SupportSession(如会议):

ActiveAdmin.register SupportSession do
  belongs_to :support_allocation

在我的索引页面上,我希望用户可以单击顶部的一个按钮(就像他们可以单击“新支持会话”一样),然后执行一个自定义方法,该方法使用 ApplicationMailer 发送电子邮件。按钮所在的位置没有“页面” - 它只是重定向回当前索引页面,并显示一条指示成功或其他情况的消息。

我可以使用以下代码在索引页面上显示“请求批准”按钮:

  # Adds a new button
  action_item only: :index  do
      link_to 'Request approvals', send_for_approval #custom method
  end

但显然这引发了一个例外:

undefined local variable or method `send_for_approval'

因为我没有在任何地方定义这个自定义方法。

我已经创建了我的邮件程序类,但我不确定如何将它“连接”到我的资源。我意识到这将涉及某种新路线,或使用现有的“放置”方法。我需要将当前的 SupportAllocation ID 交给该方法,以便它知道在发送电子邮件时要处理哪些记录/数据。

关于如何创建运行此自定义方法 + 参数的按钮的任何提示?我在哪里定义这个新的自定义方法?

谢谢您的帮助。

标签: ruby-on-railsrubyruby-on-rails-5activeadmin

解决方案


您应该首先在文件中对操作进行编码:

member_action :send_for_approval, method: :patch do
  # send your email here you can access to :resource which is your record
  YourMailer.with(support_session_id: resource.id).your_email.deliver_now
  # redirect to your admin index or show path
end

然后rails routes会给你正确的路径,这样你就可以将它传递给action_item,它看起来像这样:

action_item only: :index  do
   link_to 'Request approvals', send_for_approval_admin_support_session_path, method: :patch
end

参考:

https://activeadmin.info/8-custom-actions.html#member-actions

https://activeadmin.info/8-custom-actions.html#action-items


推荐阅读