2017-03-18 57 views
0

我正在整合SMS API在Rails應用程序中。雖然從用戶表取號我收到錯誤爲:MessageController中的類型錯誤#create_message沒有將字符串隱式轉換爲字符串

TypeError (no implicit conversion of nil into String): 
    app/models/message.rb:16:in `+' 
    app/models/message.rb:16:in `sms_message' 

這是我message.rb

def sms_message 
    require "rubygems" 
    require "net/https" 
    require "uri" 
    require "json" 
    uname = "[email protected]" 
    hash = "54030737b105dsds7777 " 
    numbers = numbers 
    message = body 
    sender = "TXTLCL" 
    requested_url = 'http://api.textlocal.in/send/?' + "username=" + uname + "&hash=" + hash + "&numbers=" + numbers + "&message=" + body + "&sender=" + sender 
    uri = URI.parse(requested_url) 
    http = Net::HTTP.start(uri.host, uri.port) 
    request = Net::HTTP::Get.new(uri.request_uri) 
    res = http.request(request) 
    response = JSON.parse(res.body) 
    puts (response) 
end 

def message_number 
    numbers = Student.new do |u| 
    u.phone1 = numbers 
    end 
end 

回答

1

Rails有一個名爲to_query不錯的方法。 首先,建立params散列,像這樣:

params = {username: uname, hash: hash, numbers: numbers, message: body, sender: sender} 

然後,只需調用"http://api.textlocal.in/send/?#{params.to_query}"

params.to_query將採取零值的照顧。

但是,這只是編寫代碼的好方法。如果值爲零,您仍然會得到相同的錯誤。更好的是在進行API調用之前添加一些驗證。此外,請確保您是否發送API預期的確切密鑰。

0

你得到numbersbodynil

爲了避免這種情況,你可以轉換這些值串或使用插值

轉換串

numbers = numbers.to_s 
message = body.to_s # Use message instead of body while joining using + 
requested_url = 
    'http://api.textlocal.in/send/?' + "username=" + uname + "&hash=" + hash + 
    "&numbers=" + numbers + "&message=" + message + "&sender=" + sender 

使用插值

requested_url = 
    "http://api.textlocal.in/send/?username=#{uname}&hash=#{hash}&numbers=#{numbers}&message=#{message}&sender=#{sender}" 
+0

感謝您的回答,但我仍然**沒有收件人指定**爲:{「errors」=> [{「code」=> 4,「message」=>「沒有指定收件人」}],「狀態「=>」失敗「} – Dhanshree

+0

啊。這可能是因爲網址 –

+0

中的零值,如果值爲'nil',則可以'返回' –

相關問題