1. ホーム
  2. ruby

[解決済み】StringからIntegerへの暗黙の変換がない(TypeError)?

2022-01-23 22:22:08

質問

Red Hat Satellite/SpacewalkからXMLRPCを使用してシステムIDを取得するスクリプトを書こうとしているのですが、どのようにすればよいでしょうか? 私は、システム名を使用してXMLRPCクライアントを使用したときに最初の値であるIDを取得しようとしています。

私が参照しているのは ドキュメント Red Hatから、以下の方法で使用されています。

#!/usr/bin/env ruby
require "xmlrpc/client"


@SATELLITE_URL = "satellite.rdu.salab.redhat.com"
@SATELLITE_API = "/rpc/api"
@SATELLITE_LOGIN = "********"
@SATELLITE_PASSWORD = "*******"

@client = XMLRPC::Client.new(@SATELLITE_URL, @SATELLITE_API)

@key = @client.call("auth.login", @SATELLITE_LOGIN, @SATELLITE_PASSWORD)

@getsystemid = @client.call("system.getId", @key, 'cfme038')

print "#{@getsystemid}"

@systemid = @getsystemid ['id']

getsystemidの出力はこのようになります。

[{"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#<XMLRPC::DateTime:0x007f9581042428 @year=2013, @month=12, @day=26, @hour=14, @min=31, @sec=28>}]

しかし、私はちょうど取得しようとすると、ちょうど id こんなエラーが出るんです。

no implicit conversion of String into Integer (TypeError)

よろしくお願いします。

解決方法は?

次のように書きます。

@systemid = @getsystemid[0]['id']

あなたの @getsystemidHash であり、それは ArrayHash . @getsystemid[0] を実行すると、意図したハッシュが得られます。 {"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#} . これで Hash#[] メソッドを使ってハッシュのキーにアクセスできます。