继承类没有属性?

时间:2016-09-30 22:57:17

标签: ruby inheritance polymorphism jira

我正在使用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类,但我不确定我是否清楚地了解它如何将我对类的方法调用映射到属性hash,或者为什么我的扩展类会这样做不要做同样的事情。

1 个答案:

答案 0 :(得分:1)

在ruby中,当找不到调用的方法时,调用方法method_missing,传递方法名称,参数和调用中使用的块。 JIRA::Resource::Issuemethod_missing的定义:

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

在定义中可以验证它是否首先搜索attrs['fields']哈希值,如果没有找到它从父类调用method_missing,那么搜索{{1 }}

初始化对象时,显然会设置

attrs。如何初始化示例中的对象?