Ruby の to_i メソッドはゼロを返します
概要
Ruby の to_i メソッドがゼロを返します。文字列を整数に変換せずにゼロを返す理由はわかります。
job_id = job_template_id[index]
@handle.log(:info, "job_id is: #{job_id}")
job_id = job_id.to_i
@handle.log(:info, "job_id 2 is: #{job_id}")
[----] I, [2022-03-24T09:23:29.327746 #328:2aebe6eaa0a4] INFO -- automation: Q-task_id([r382_miq_provision_1347]) <AEMethod launch_ansible_job> job_template_id is: "39"
[----] I, [2022-03-24T09:23:29.328220 #328:2aebe6eaa0a4] INFO -- automation: Q-task_id([r382_miq_provision_1347]) <AEMethod launch_ansible_job> job_id is: "39"
[----] I, [2022-03-24T09:23:29.328778 #328:2aebe6eaa0a4] INFO -- automation: Q-task_id([r382_miq_provision_1347]) <AEMethod launch_ansible_job> job_id 2 is: 0
job_template_id は配列です。
job_template_id => ["39", "40"]
解決策
job_template_id が [‘“39”’, ‘“40”’] ではなく [‘39’, ‘40’] でよろしいですか?
irb で次のように考えてみましょう。
irb > job_id = "39"
=> "39"
irb > puts "job_id is #{job_id}"
job_id is 39
=> nil
irb > job_id.to_i
=> 39
補間された文字列には引用符がありません。ただし、内部引用符がある場合は、文字列補間と #to_i 呼び出しの両方で何が表示されるかがわかります。
irb > job_id = '"39"'
=> "\"39\""
irb > puts "job_id is #{job_id}"
job_id is "39"
=> nil
irb > job_id.to_i
=> 0
job_template_id の要素内に余分な引用符があります。おそらく #inspect を使用して job_template_id を設定しているか、二重 JSON エンコーディングを行っている可能性があります。 job_template_id を構築するコードを見て、余分な引用符がどこから来ているかを確認してみます。また、job_template_id の名前を job_template_ids に変更します。配列には複数の名前を付ける必要があります。