web-dev-qa-db-ja.com

StringからInteger(TypeError)への暗黙的な変換はありませんか?

XMLRPCを使用するRed Hat Satellite/Spacewalkからシステム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)

どんな助けも大歓迎です

12
user3137647

として書く

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

きみの @getsystemidHashではなく、ArrayHashです。 @getsystemid[0]は、目的のハッシュ{"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#}。これで Hash#[] キーを使用してハッシュの値にアクセスする方法。

38
Arup Rakshit