如何使用此模块/类设置?

时间:2011-12-22 20:17:48

标签: ruby-on-rails ruby class

我有以下模块/类:

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

一切正常,直到tracker.signature_name部分,这会引发undefined method 'signature_name' for nil:NilClass错误。

2 个答案:

答案 0 :(得分:1)

问题出在这一行:

self.signature_name = details[:delivery_signature_name]      

details[:delivery_signature_name]原来是nil,然后将其分配给self.signature_name,然后成为track方法的返回值。在这里

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

tracker将为nil,您尝试在其上调用方法。

你可能想写这个:

def track(number)
  details = response(number)

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

答案 1 :(得分:0)

您需要两种名为signature_name=response的方法,这些方法可以完成您班级应该做的任何事情。