【问题标题】:Ruby Savon RequestsRuby Savon 请求
【发布时间】:2011-10-21 17:26:14
【问题描述】:

@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 变量不在请求块的“范围”内。所以我在 nil 上得到了一个无法调用的方法 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

没听懂?

【问题讨论】:

    标签: ruby soap savon


    【解决方案1】:
    1. 类方法示例就是这样,一个示例。随意使用任何响应to_s 的对象。

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

    有关要指定的参数和其他所有信息,please RTFM ;)

    【讨论】:

    • 我想我的挂断是你提到的“F***ing Manual”,描述了你关于 Savon::Client.new 的第二点行为。我不认为这与 Savon::Client#request 方法相同。 rdoc 中是否描述了该方法的签名或其他内容?无论如何,感谢您的意见,我做了 RTFM ;)
    • 好吧,如果您阅读Executing SOAP Requests,应该会很明显。如果您认为不是,请fork the documentation,解决问题并让我知道。它是开源的,感谢任何支持!
    猜你喜欢
    • 2022-08-22
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多