Ruby Savon请求

时间:2011-10-21 01:48:25

标签: ruby soap savon

@rubiii之前已经显示(Savon soap body problem)您可以使用

自定义Savon请求
class SomeXML
  def self.to_s
    "<some>xml</some>"
  end
end

client.request :some_action do
  soap.body = SomeXML
end

但为什么要使用这样的类方法?你似乎更有可能要求一个类的实例将自己变成请求体的哈希。即。

@instance = SomeClass.new

client.request :some_action do
  soap.body = @instance.to_soap
end

但是,当我尝试这样做时,@ instance变量不在请求块中的“范围”中。所以我得到一个无法调用方法to_soap为零。但是,如果我使用类方法,那么我可以让它工作。即。

class SomeClass
  @@soap_hash = nil

  def self.soap_hash=(hash)
    @@soap_hash = hash
  end

  def self.soap_hash
    @@soap_hash
  end
end

SomeClass.soap_hash = @instance.to_soap

client.request :some_action do
  soap.body = SomeClass.soap_hash
end

我不明白吗?

1 个答案:

答案 0 :(得分:1)

  1. 类方法示例只是一个例子。随意使用响应to_s的任何对象。

  2. 通过instance_eval with delegation处理块,这就是为什么你只能在块内使用局部变量和方法。如果需要使用实例变量,请将块更改为接受参数。 Savon会注意到你指定了参数并产生了这些值而不是评估块。

  3. 有关指定哪些参数及其他所有参数的信息,please RTFM;)