2016-09-30 371 views
0

我正在使用jira-ruby庫,並且擴展瞭如下定義的JIRA::Resource::Issue類。繼承的類不具有屬性?

class ServerRequest < JIRA::Resource::Issue 
    def requested_os 
    customfield_11169 
    end 
end 

當我創建一個新的ServerRequest對象,我無法訪問像我能屬性時,對象是JIRA::Resource::Issue

恩。

[81] pry(main)> ticket.class 
=> JIRA::Resource::Issue 
[80] pry(main)> ticket.customfield_11169 
=>{"self"=>"http://REDACTED:8080/rest/api/2/customFieldOption/14451", 
"value"=>"Linux - CentOS","id"=>"14451"} 
[81] pry(main)> request = ServerRequest.new(ticket) 
[82] pry(main)> request.class 
=> ServerRequest 
[83] pry(main)> request.customfield_11169 
NoMethodError: undefined method `customfield_11169' for #<ServerRequest:0x005634b57431b0> 
from /home/user/.gem/ruby/gems/jira-ruby-1.1.0/lib/jira/base.rb:308:in `method_missing' 

我試圖通過JIRA::Resource::Base類閱讀,但我不知道我有多麼它的地圖我的方法上調用類的屬性哈希,或者一個清晰的認識,爲什麼我的擴展類不不是做同樣的事情。

回答

1

在ruby中,當找不到方法時,調用方法method_missing,傳遞方法名稱,參數和調用中使用的塊。 JIRA::Resource::Issue,有method_missing一個定義:

https://github.com/sumoheavy/jira-ruby/blob/master/lib/jira/resource/issue.rb#L89

在定義可以驗證它是否搜索第一attrs['fields']哈希值,如果沒有找到它的父類調用method_missing,在attrs該搜索。

attrs顯然是在初始化對象時設置的。你如何初始化你的例子中的對象?

+0

完美答案。我讀入了'method_missing'方法,並能夠確定我沒有正確實例化'@ attrs'變量。在'initialize'方法中調用'super'解決了這個問題。 – thisguy123