2011-10-21 1 views
1

@rubiii 이전에 보여 주었다 요청 (Savon soap body problem) 당신이 Savon이루비 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을 nil에 호출 할 수 없습니다. 하지만 대신 클래스 메서드를 사용하면 작동하도록 할 수 있습니다. 즉

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
  1. 클래스 메서드 예제는 예제 일뿐입니다. to_s에 응답하는 모든 개체를 자유롭게 사용하십시오.

  2. 블록은 instance_eval with delegation을 통해 처리되므로 블록 내부에서만 로컬 변수와 메소드를 사용할 수 있습니다. 인스턴스 변수를 사용해야하는 경우 인수를 허용하도록 블록을 변경하십시오. Savon은 블록을 평가하는 대신 인수를 지정하고 해당 값을 산출 함을 알게됩니다. 인수, please RTFM을에서 지정할 다른 모든 것들할지에 대한 내용

)

+0

는 것 같아요 내 끊기은 "F는 *** 수동 보내고"를 참조 관해서 두 번째 포인트 동작을 설명하는 것이 었습니다 Savon에게 : Client.new. 나는 이것이 Savon :: Client # 요청 방법과 동일하다고 가정하지 않았다. 그 메소드의 서명은 rdoc 또는 뭔가에 설명되어 있습니까? 어쨌든, 입력 해 주셔서 감사 드리며 RTFM을 작성했습니다.) – SupaIrish

+0

[SOAP 요청 실행] (http://savonrb.com/#executing_soap_requests)을 읽으시면 글쎄요. 그렇지 않다고 생각되면 [설명서를 포크하십시오] (https://github.com/rubiii/savonrb.com)를 방문하여 문제를 수정하고 이에 대해 알려주십시오. 그것은 오픈 소스이며, 나는 어떤 지원을 주셔서 감사합니다! – rubiii