首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby Savon请求

Ruby Savon请求
EN

Stack Overflow用户
提问于 2011-10-21 09:48:25
回答 1查看 340关注 0票数 1

@rubiii之前已经展示了(Savon soap body problem),您可以使用以下命令自定义Savon请求

代码语言:javascript
复制
class SomeXML
  def self.to_s
    "<some>xml</some>"
  end
end

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

但是为什么要使用这样的类方法呢?似乎更有可能的是,您会要求类的实例将其自身转换为请求体的散列。即

代码语言:javascript
复制
@instance = SomeClass.new

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

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

代码语言:javascript
复制
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

我还是不明白?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-21 17:26:15

  1. 类方法的例子只是一个例子。可以随意使用任何响应to_s.
  2. The块的对象都是通过instance_eval with delegation处理的,这就是为什么您只能在块内使用局部变量和方法的原因。如果您需要使用实例变量,请更改您的块以接受参数。Savon将注意到您指定了参数并生成这些值,而不是计算块。

有关要指定哪些参数以及其他所有内容的信息,请访问please RTFM ;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7844181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档