2017-03-18 7 views
0

RailsアプリケーションでSMS APIを統合しています。私はエラーを取得していますユーザテーブルから数値を取っている間:MessagesControllerのTypeError#create_message文字列にnilを暗黙的に変換しない

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

これは、あなたがいずれかを変換することができ、これを回避するためにnumbersまたはbody

nilなどを取得している私の 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ハッシュ構築:ちょうどゼロ値の世話をします"http://api.textlocal.in/send/?#{params.to_query}"

params.to_queryを呼び出し、その後

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

を。

しかし、これはコードを書くうえで便利な方法です。値がnilの場合でも、同じエラーが発生します。 API呼び出しを行う前にいくつかのバリデーションを追加する方が良いでしょう。また、APIが要求する正確なキーを送信しているかどうかを確認してください。

0

です文字列や補間を使用する値

変換文字列に

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

回答ありがとうございます。受信者が指定されていません**: "エラー" => [{"code" => 4、 "メッセージ" => "受信者が指定されていません"}]ステータス "=>"失敗 "} – Dhanshree

+0

ああ。おそらくURLの値がゼロのために –

+0

の値が 'nil'の場合は' return'することができます –

関連する問題