Webservice使用名为“type”的方法。如何使用红宝石消费?

时间:2012-10-22 20:21:24

标签: ruby soap4r

我正在使用ruby(1.8.7)和soap4r(1.5.8)来使用Web服务。 Web服务有一个名为“type”的方法,我无法获得该值。

@driver=SOAP::WSDLDriverFactory.new(WSDL_URL).create_rpc_driver
result = @driver.GetJob(:jobid => "123")
puts "jobname is #{result.name}"
puts "jobtype is #{result.type}"

第四行给出了“警告:不推荐使用Object#type;使用Object#class”。我知道不推荐使用Object.type。我想调用从Web服务获得的结果的“类型”方法。我不拥有网络服务,所以我无法改变它。

任何帮助表示赞赏。提前谢谢。

3 个答案:

答案 0 :(得分:4)

可能使用method_missing调用type方法,当Object上存在方法时,此机制不起作用。如果是这样,这个小小的猴子补丁摆脱了Object.type:

class Object
  undef_method :type
end

在调用Web服务之前将此代码放在某处,它应该可以正常工作。

另一种解决方法是升级到ruby 1.9。类型方法消失了!

答案 1 :(得分:1)

我会寻找一种方法,允许您传入代表您想要的属性的符号。它就像

puts "jobtype is #{result.some_method(:type)}"

或(不太可能)

puts "jobtype is #{result.some_method("type")}"

@ froderik的答案可能会帮助您解决某个特定情况,但如果您想要的属性被称为“class”,“send”或“initialize”,该怎么办?肥皂库必须以某种方式处理这种情况,除非它的设计很糟糕。

答案 2 :(得分:1)

猜猜,result['type']怎么样?或result[:type]