我有以下模块/类:
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
错误。
答案 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
的方法,这些方法可以完成您班级应该做的任何事情。