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预期的确切密钥。
答
你得到numbers
或body
为nil
为了避免这种情况,你可以转换这些值串或使用插值
转换串
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}"
感谢您的回答,但我仍然**没有收件人指定**为:{“errors”=> [{“code”=> 4,“message”=>“没有指定收件人”}],“状态“=>”失败“} – Dhanshree
啊。这可能是因为网址 –
中的零值,如果值为'nil',则可以'返回' –