2016-09-30 23 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

ルビでは、呼び出されたメソッドが見つからない場合は、メソッド名、引数、呼び出しで使用されたブロックを渡してメソッドmethod_missingが呼び出されます。定義では

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

が可能であることが第1の値についてattrs['fields']ハッシュを探していますことを確認し、見つからない場合には、親クラスからattrsでその検索をmethod_missingを呼び出します:JIRA::Resource::Issueは、method_missingの定義を持っています。

attrsオブジェクトが初期化されたときに明らかに設定されます。あなたの例でオブジェクトをどのように初期化しますか?

+0

完璧な答え。私は 'method_missing'メソッドを読み込み、' @ attrs'変数を適切にインスタンス化していないと判断できました。 'initialize'メソッドで' super'への呼び出しを追加することで問題が解決されました。 – thisguy123

関連する問題