MessageController中的类型错误#create_message没有将字符串隐式转换为字符串

问题描述:

我正在整合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 

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预期的确切密钥。

你得到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',则可以'返回' –