【问题标题】:Custom action_item with custom method in Active Admin在 Active Admin 中使用自定义方法自定义 action_item
【发布时间】:2019-07-16 16:00:05
【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

  • 我的回答对你有帮助吗?
  • 是的,谢谢 - 太好了。但它还没有完全奏效。我在下面发表了评论。我想我用我的嵌套资源把它复杂化了。 (也不确定这是否最好作为成员或收集操作。)
  • 如您所说,您需要记录 id,您别无选择,只能将其设为会员操作
  • 没错。但该 ID 是用于嵌套在其上方的资源 - 因此用户已经选择了一个 support_allocation ID。现在他们正在查看当前支持分配(特定 ID)的所有 support_session(此页面上有很多,没有特定 ID)。我的自定义方法将发送一封电子邮件,其中包括当前支持分配的所有支持会话:即它发送一封不限于任何特定支持会话 ID 的电子邮件。

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


【解决方案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

【讨论】:

  • 这太棒了!谢谢你。它几乎可以工作......我得到的错误与路径有关,我认为(action_item的link_to部分中的'未定义的局部变量或方法')。如果我 rake 路由,我可以看到生成了一个新路由,但这是一个嵌套资源,请记住:request_approval_support_allocation_support_session。但是,如果我在 link_to 中使用 request_approval_support_allocation_support_session_path 它仍然会创建一个异常。
  • 抱歉,应该是:'request_approval_support_allocation_support_sessions_path' - 但这仍然会引发异常错误(我的方法称为 request_approval)。
  • @ChrisKenworthy 哦,是的,我忘记了,如果您按照我的回答中的建议进行了:patch 操作,链接应该是:link_to 'Request approvals', request_approval_support_allocation_support_sessions_path, method: :patch 我会更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多