【问题标题】:Solution to AbstractController::DoubleRenderErrorAbstractController::DoubleRenderError 的解决方案
【发布时间】:2014-08-10 17:16:11
【问题描述】:

我使用 Twilio API 构建了一个带有电话文本用户界面的志愿者跟踪应用程序。我不需要视图,所以我的控制器包含以下代码:

class TwilioController < ApplicationController
  include TwilioHelper

  def sms_receive
    user = User.find_or_create_by(phone_number: params[:From])
    text = Text.create(user_id: user.id, body: params[:Body].capitalize, date: DateTime.now)
    activity_log = ActivityLog.new(user_id: user.id, phone_number: "xxx-xxx-#{user.last_four_digits}", text_id: text.id)

    args = {user: user, text: text, activity_log: activity_log, options: params}

    volunteer_manager = VolunteerHandler.new(args)
    replies = volunteer_manager.process
    replies.each {|reply| text_response(reply, args[:options])}
  end

  def text_response(reply, args)
    account_sid = ENV['ACCOUNT_SID']
    auth_token = ENV['AUTH_TOKEN']
    client = Twilio::REST::Client.new account_sid, auth_token

    client.account.messages.create(:body => reply, :to => args[:From], :from => args[:To])
    render nothing: true and return
  end
end

用户将发送一个多命令字符串(即“加入美国红十字会”)。在这种情况下,两个命令将执行“In”和“with American Red Cross”。这些命令返回一个字符串数组,例如 ['Thank you for志愿者','您希望美国红十字会与您保持联系以获取未来的志愿服务机会吗?']。这个数组就是局部变量replies所指向的。

如果我取消渲染 nothing:true 并返回代码,则会收到错误消息:ActionView::MissingTemplate Missing template twilio/sms_receive 我可以创建不必要的视图并解决我的问题,但这似乎不是最好的解决方案。

非常感谢任何和所有帮助。谢谢。

【问题讨论】:

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


    【解决方案1】:

    由于replies 是一个数组,它在text_response 上迭代,它多次执行render nothing: true and return,这是您面临错误的原因。

    尝试让render 语句退出循环。

    class TwilioController < ApplicationController
      include TwilioHelper
    
      def sms_receive
        user = User.find_or_create_by(phone_number: params[:From])
        text = Text.create(user_id: user.id, body: params[:Body].capitalize, date: DateTime.now)
        activity_log = ActivityLog.new(user_id: user.id, phone_number: "xxx-xxx-#{user.last_four_digits}", text_id: text.id)
    
        args = {user: user, text: text, activity_log: activity_log, options: params}
    
        volunteer_manager = VolunteerHandler.new(args)
        replies = volunteer_manager.process
        replies.each {|reply| text_response(reply, args[:options])}
        render nothing: true and return
      end
    
    
      def text_response(reply, args)
        account_sid = ENV['ACCOUNT_SID']
        auth_token = ENV['AUTH_TOKEN']
        client = Twilio::REST::Client.new account_sid, auth_token
    
        client.account.messages.create(:body => reply, :to => args[:From], :from => args[:To])
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2015-10-26
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多