2011-12-22 15 views
0

私は、以下のモジュール/クラスを持っている:私は行うことができるようにしたいのですがどのようなこのモジュール/クラス設定ではどのように作業できますか?

module Pigeons 
    class FedEx 

    attr_accessor :signature_name 

    def initialize(account) 
     self.account = account 
    end 

    def response(number) 
     body = "...some xml..." 
     return HTTParty.post('http://example.com', :body => body) 
    end 

    def track(number) 
     details = response(number) 

     self.signature_name = details[:delivery_signature_name]  
    end 
    end 
end 

はこれです:

@fedex ||= Pigeons::FedEx.new('123abc') 
tracker = fedex.track('1234567890') 
tracker.signature_name 

すべてがundefined method 'signature_name' for nil:NilClassをスローtracker.signature_name一部、まで働いていますエラー。

答えて

1

問題は、この行にある:

self.signature_name = details[:delivery_signature_name]  
details[:delivery_signature_name]

は次にself.signature_nameに割り当てられ、次いでtrackメソッドの戻り値となるnil、であることが判明しました。そして、ここで

tracker = fedex.track('1234567890') 
tracker.signature_name 

trackernilとなり、あなたはそれにメソッドを呼び出すようにしてください。

おそらく、代わりにこれを書くことを意味:

def track(number) 
    details = response(number) 

    self.signature_name = details[:delivery_signature_name]  
    self # <== here 
end 
+0

私のサンプルコードにそれを含めたのを忘れました(ちょうど今更新しました)。 – Shpigford

+0

今私はそれを見つけました:-) –

+0

スコア!ご協力いただきありがとうございます! – Shpigford

0

signature_name=responseという2つのメソッドが必要です。これらのメソッドは、クラス内で何を行うことになっていてもかまいません。

+0

私は簡単なように、私はできる限りのポイントに、この記事では、私のサンプルコードを維持しようとしましたが、私は私が既に持っていることを示すために更新しました'response'メソッドと' attr_accessor'を使って 'signature_name'にアクセスしています – Shpigford

関連する問題