我设置了一个Mandrill Web挂钩,这样每次我的应用程序尝试向无效地址发送电子邮件时,Mandrill都会向我的应用发送一个POST错误。
我已经设置了一个模型/控制器来捕获这篇文章作为EmployeeDataError类。
我的问题是,由于Mandrill只是发送一个POST到我的应用程序而不需要去其他地方,控制器操作是否应该有一个respond_to阻止?创建操作当前响应的内容就是来自Rails脚手架的内容,但是这个respond_to块似乎适合我网站上的用户,而不适合外部服务。
def create
employee = Employee.find_by_email(params[:email])
@employee_data_error = EmployeeDataError.new(employee_id: employee.id)
respond_to do |format|
if @employee_data_error.save
format.html { redirect_to @employee_data_error, notice: 'Employee data error was successfully created.' }
format.json { render action: 'show', status: :created, location: @employee_data_error }
else
format.html { render action: 'new' }
format.json { render json: @employee_data_error.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:1)
这取决于你想要的方法
<强>请强>
请求的method
(POST
)与Rails的respond_to
阻止无关,因为这会处理type
请求(xhr
/ http
)。不同之处在于,无论是否为GET,POST,PATCH等,respond_to块仍将继续运行
我建议只需将:status
返回给Mandrill,因为这样可以节省CPU电量;像这样(假设Mandrill发送JSON请求):
respond_to do |format|
if @employee_data_error.save
format.html { redirect_to @employee_data_error, notice: 'Employee data error was successfully created.' }
format.json { render nothing: true, status: :200 }
else
format.html { render action: 'new' }
format.json { render nothing: true, status: :500 }
end
end
希望这会有所帮助吗?