并非所有方法都被称为Sinatra

时间:2014-08-24 05:59:10

标签: ruby routing sinatra twilio redirect

我正在使用Sinatra和Twilio api构建一个Ruby应用程序。

通过拨打我指定的Twilio号码,系统会提示用户录制音频信息。一旦记录了该消息,用户就会被重定向到以下路由,如果用户拨打1(或其他任何内容),他们应该被重定向到他们的消息提要,但是如果用户拨打2,那么用户的消息将被删除,并且应该被重定向到他们可以录制新消息的路线。

这是我的路线:

get '/playback/handle-recording/:recordingSID' do
  if params['Digits'] = '2'
    delete(params['recordingSID'])
    deletedMsg = "Audio deleted."
    getRecord(deletedMsg)
  else
    getFeed()
  end

end

辅助方法:

helpers do

  def delete(recording)
    recording = client().account.recordings.get(recording)
    recording.delete
  end

  def getFeed()
    redirect '/feed'
  end

  def getRecord(appendMsg)
    Twilio::TwiML::Response.new do |response|
      if appendMsg
        response.Say appendMsg
      end
      response.Say "Record your message."
      response.Record :maxLength => '5', :trim => "trim-silence", :playBeep => "true", :action => '/playback', :method => 'get'
    end.text
  end

end

我的问题是,无论用户是否登陆“if”或“else”第一种方法,getRecord(deletedMsg)是被调用的方法,而不是getFeed()。

如何修复我的路线,以便当用户登陆else时,他会被重定向到他的Feed页面而不是getRecords方法。

1 个答案:

答案 0 :(得分:1)

你确定他们真的把它变成了else吗? Ruby不会毫无理由地随意执行那里的内容。

您可能想要看一件事是分配,而不是比较params值:

if params['Digits'] = '2'

你想做的事:

if params['Digits'] == '2'

这肯定会在if语句中导致一些奇怪的行为,比如总是执行一条路径。