Webhook发布到我的rails应用程序,控制器应如何响应?

时间:2014-01-09 23:31:17

标签: ruby-on-rails ruby ruby-on-rails-4

我设置了一个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

1 个答案:

答案 0 :(得分:1)

这取决于你想要的方法


<强>请

请求的methodPOST)与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

希望这会有所帮助吗?