@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
我不明白吗?
答案 0 :(得分:1)
类方法示例只是一个例子。随意使用响应to_s
的任何对象。
通过instance_eval with delegation处理块,这就是为什么你只能在块内使用局部变量和方法。如果需要使用实例变量,请将块更改为接受参数。 Savon会注意到你指定了参数并产生了这些值而不是评估块。
有关指定哪些参数及其他所有参数的信息,please RTFM;)