Active Admin中具有自定义方法的自定义action_item

时间:2019-07-16 16:00:05

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

我在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传递给该方法,以便它在发送电子邮件时知道要处理哪些记录/数据。

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

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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