web-dev-qa-db-fra.com

Pas de conversion implicite de String en entier (TypeError)?

J'essaie d'écrire un script qui obtiendra un ID système de Red Hat Satellite/Spacewalk, qui utilise XMLRPC. J'essaie d'obtenir l'ID qui est la première valeur lors de l'utilisation du client XMLRPC en utilisant le nom du système.

Je fais référence à la documentation de Red Hat pour la méthode utilisée ci-dessous:

#!/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']

La sortie de getsystemid ressemble à ceci:

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

Mais quand j'essaye juste d'obtenir juste id j'obtiens cette erreur:

no implicit conversion of String into Integer (TypeError)

Toute aide est appréciée

12
user3137647

Ecrire comme

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

Votre @getsystemid n'est pas un Hash, c'est un Array de Hash. @getsystemid[0] vous donnera le hachage prévu {"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#}. Vous pouvez maintenant utiliser Hash#[] méthode pour accéder à la valeur du hachage en utilisant ses clés.

38
Arup Rakshit