问题描述
def demo_request
@user = params[:user]
mail(
to: "foo@bar.com",subject: "[DEMO REQUEST] #{@user[:name]} - #{@user[:email]}",body: "A potential customer,#{@user[:name]},requested a demo be sent to them. You can follow up with them at #{@user[:email]}",content_type: "text/html"
)
end
class DemoRequestsController < ApplicationController
skip_before_action :authenticate_user!
def create
@user = params.permit(:email,:name)
UserMailer.with(user: @user).demo_request.deliver_Now
end
end
也非常简单,它仅在接收到带有某些参数的POST请求时调用Mailer。客户端应用程序正在使用此API,Rails Forms在这里不起作用。
在测试中,我可以看到Mailer似乎工作正常,但是问题是,显然,控制器将返回204: No Content
响应。
仅在邮件程序成功的情况下,使控制器返回200 OK
响应的正确方法是什么?否则,返回404或错误消息或其他适当的信息。
解决方法
尚不清楚是从客户端应用程序(您将其作为JSON API处理)中调用您的控制器,还是它是纯导轨形式。
如果使用json api /服务,则可以尝试将json渲染回
begin
UsererMailer.with(user: @user).demo_request.deliver_now
render json: { message: 'ok' },status: 200
rescue StandardError => e
render json: { error: e.inspect },status: 500
end
如果它是常规的Rails控制器/应用程序,则建议将用户重定向到某个地方:
begin
UsererMailer.with(user: @user).demo_request.deliver_now
redirect_to some_path
rescue StandardError => e
redirect_to some_path,error: e.inspect
end
,
一个简单的head :ok
就足够了。
def create
@user = params.permit(:email,:name)
UserMailer.with(user: @user).demo_request.deliver_now
head :ok
end
因为如果发送电子邮件失败,那么总会有500 ServerError
。