Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在从函数返回之前呈现json消息_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在从函数返回之前呈现json消息

Ruby on rails 如何在从函数返回之前呈现json消息,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何在返回之前呈现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

如何在返回之前呈现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

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

如果这是控制器方法,您将希望
渲染
是您最后调用的对象,而不是
公司。发送

def创建公司
开始
公司=当前用户公司
结果=company.create\u用户
公司。发送电子邮件(结果[1])
呈现(json:{message:result[0]},状态::ok)
救援=>e
呈现(json:{error:e.message},status::unprocessable_entity)
结束
结束
编辑 根据您的评论,我看到您希望在渲染完成后将电子邮件作业发送出去。为此,您需要设置一个异步服务。根据您使用的是rails还是什么版本,您可以使用。这本身就是一个设置过程,如果您以前从未做过,那么您需要仔细阅读

您的控制器方法如下所示

def创建公司
开始
公司=当前用户公司
结果=company.create\u用户
公司。发送电子邮件(结果[1])。稍后发送
呈现(json:{message:result[0]},状态::ok)
救援=>e
呈现(json:{error:e.message},status::unprocessable_entity)
结束
结束

deliver\u later
是一种活动工方法,如果您配置了活动工,则可以在发送电子邮件时调用该方法。

您的问题不清楚。Ruby隐式返回,因此您放入函数中的最后一项将返回。如果你想让它在返回之前返回,你需要将
render(json:{message:result[0]},status::ok)
移动到
company.send
你想做什么?…呈现json然后发送电子邮件?你不能只呈现json,您需要发送json对象并在视图上显示它……这是js请求吗?为什么需要在渲染后发送电子邮件?要做到这一点,您需要设置一个异步服务,因为控制器方法需要返回作为您的呈现输出。我希望按照正确的顺序执行此操作,“呈现json,然后发送电子邮件”正如你所说,Milind发送电子邮件需要很长时间,我不想做前端等待,我想按照我说的
render(json:{message:result[0]},status::ok
而不是
company.send_email(result[1])的顺序来做这个控制器
不想让前端等待所有电子邮件的发送,而不是render@ToshiukHirahataRuby的执行不像JavaScript那样是异步的。如果你想在渲染后发送电子邮件,你需要设置一个异步服务来处理这个问题。