Нет неявного преобразования String в Integer (TypeError)?

Я пытаюсь написать сценарий, который получит идентификатор системы из Red Hat Satellite/Spacewalk, который использует XMLRPC. Я пытаюсь получить идентификатор, который является первым значением при использовании клиента XMLRPC с использованием имени системы.

Я ссылаюсь на документацию из 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']

Результат getystemid выглядит следующим образом:

[{"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)

Любая помощь приветствуется

Ответ 1

Напишите как

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

Ваш @getsystemid не Hash, это Array из Hash. @getsystemid[0] предоставит вам предполагаемый хэш {"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#}. Теперь вы можете использовать метод Hash#[] для доступа к значению хэша с помощью его ключей.