Ruby on rails Rails在未更改任何内容的情况下抛出丢失模板错误

Ruby on rails Rails在未更改任何内容的情况下抛出丢失模板错误,ruby-on-rails,twilio,Ruby On Rails,Twilio,我的rails应用程序已经上线几个月了,没有任何问题。我最近(几天内)没有做任何重大更改,今天早上,airbrake针对一次特定的回调抛出了一系列错误,我说: ActionView::MissingTemplate (Missing template calls/receive_call, application/receive_call 我最近没有在视图或路线中更改任何内容,这可能是什么原因造成的?以下是我的接收呼叫方法: def receive_call to_number

我的rails应用程序已经上线几个月了,没有任何问题。我最近(几天内)没有做任何重大更改,今天早上,airbrake针对一次特定的回调抛出了一系列错误,我说:

ActionView::MissingTemplate (Missing template calls/receive_call, application/receive_call
我最近没有在视图或路线中更改任何内容,这可能是什么原因造成的?以下是我的接收呼叫方法:

  def receive_call
    to_number   = params[:To]   == '+1' ? params[:Called].slice!(2..12) : params[:To].slice!(2..12)
    from_number = params[:From] == '+1' ? params[:Caller].slice!(2..12) : params[:From].slice!(2..12)
    company = PhoneNumber.find_by(number: to_number).company
    customer = company.customers.find_or_create_by(customer_phone_number: from_number)
    if company && customer
      call = company.calls.create(
        from:         from_number,
        to:           to_number,
        customer_id:  customer.id,
        call_status:  params[:CallStatus],
        call_sid:     params[:CallSid],
        forwarded_to: company.forwarding_number
      )
      forwarding_number = company.twilio_formatted_forwarding_number
      if forwarding_number
        render 'twilio/call_response.xml.haml', locals: { forwarding_number: forwarding_number }, content_type: 'text/xml'
      end
    else
      puts 'ERROR (receive_call): company or customer couldn\'t be loaded'
    end
  end

我以前从未需要过这个回调的视图(来自twilio),但现在它说我需要一个。发生了什么事?

我想,这是你第一次出错。
如果发生错误,您将使用puts输出错误。
在操作结束时,Rails尝试渲染标准视图,因为尚未渲染任何内容

可以将纯文本渲染为

      if forwarding_number
        render 'twilio/call_response.xml.haml', locals: { forwarding_number: forwarding_number }, content_type: 'text/xml'
      else
        render text: 'ERROR (receive_call): no forwarding number.'
      end
    else
      render text: 'ERROR (receive_call): company or customer couldn\'t be loaded'
    end
或在
放置后返回

puts 'ERROR (receive_call): company or customer couldn\'t be loaded'
return
当然,无论是否存在错误,都应该呈现相同类型的响应(XML),所以最好这样做

render xml: {error: 'ERROR (receive_call): company or customer couldn\'t be loaded'}, status: 404

等等。

这里有一个猜测:无论出于何种原因,您的
if company&customer
语句返回false,导致您将
放入
错误,但不调用
渲染
。也许可以尝试在
放置
@jsksma2之后调用
render nothing:true,status:422
,但为什么这段代码工作了2个月,今天早上就随机停止工作了?我不确定,但如果你仔细研究一下你的方法,对于第一个if语句,如果没有转发号,那么第二个if语句没有执行,也没有else块,因此rails必须查找其相应的视图,如我所说,我猜if语句突然开始返回false。可能您的PhoneNumber表正在返回一个
nil
对象。它似乎只是创建了一个空白的receive\u call.html.haml文件…现在可以工作了…太奇怪了…不确定是什么原因造成的更改,然后在操作结束时没有任何显式渲染,就有一些东西需要渲染。