首页 > 解决方案 > 如何在从函数返回之前呈现 json 消息

问题描述

如何在返回之前呈现 json 消息?

使用以下代码,它在最后一个函数完成后返回:

def create_company
    begin
      company = current_user.company
      result = company.create_users
      render(json: {message: result[0]}, status: :ok)
      company.send_email(result[1])
    rescue => e
      render(json: { error: e.message }, status: :unprocessable_entity)
   end
end

我希望得到渲染结果然后发送一封电子邮件,而不是等到发送电子邮件才能渲染结果。

标签: ruby-on-railsruby

解决方案


如果这是一个控制器方法,你会想要render成为你调用的最后一件事,而不是company.send

def create_company
    begin
      company = current_user.company
      result = company.create_users
      company.send_email(result[1])
      render(json: {message: result[0]}, status: :ok)
    rescue => e
      render(json: { error: e.message }, status: :unprocessable_entity)
   end
end

编辑 根据您的评论,我看到您希望在渲染发生后发送电子邮件作业。为此,您需要设置异步服务。根据您是否使用 rails 和什么版本,您可以使用ActiveJob。如果您以前从未做过,这本身就是一个设置过程,因此您需要阅读它。

您的控制器方法如下所示

def create_company
    begin
      company = current_user.company
      result = company.create_users
      company.send_email(result[1]).deliver_later
      render(json: {message: result[0]}, status: :ok)
    rescue => e
      render(json: { error: e.message }, status: :unprocessable_entity)
   end
end

deliver_later如果您配置了活动作业,则可以在发送电子邮件时调用该活动作业方法。


推荐阅读