ruby-on-rails - 如何在从函数返回之前呈现 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
我希望得到渲染结果然后发送一封电子邮件,而不是等到发送电子邮件才能渲染结果。
解决方案
如果这是一个控制器方法,你会想要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
如果您配置了活动作业,则可以在发送电子邮件时调用该活动作业方法。
推荐阅读
- html - 在徽标和文本之间画一条线
- python-3.x - 尝试通过 cx_oracle python 中的绑定变量提取数据
- sql - PostgreSQL:使用文本函数和转换后如何求和?(错误 SQL 状态:22P02)
- mysql - 额外的 SQL 搜索条件是否会降低或提高性能?
- javascript - 尝试将 javascript 按钮转换为闪电组件
- javascript - 从当前时间减去时间
- c# - 使用 Azure 函数输出绑定附加到日志文件
- spring - JdbcMetadataStore:初始化模式,但对于不使用 Boot 的 Spring 应用程序
- google-apps-script - 我可以将我的应用脚本库共享到另一个帐户吗
- datatable - 我需要将ckeckbox数据表传递给控制器