继承class没有属性?
Inherited class doesn't have attributes?
我正在使用 jira-ruby 库,并且扩展了 JIRA::Resource::Issue
class 如下定义。
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
class,但我不确定我是否清楚地了解它如何将我在 class 上的方法调用映射到属性散列,或者为什么我的扩展 class 不做同样的事情。
在ruby中,当找不到调用的方法时,调用方法method_missing
,传递方法名、参数和调用中使用的块。 JIRA::Resource::Issue
,有 method_missing
的定义:
https://github.com/sumoheavy/jira-ruby/blob/master/lib/jira/resource/issue.rb#L89
在定义中可以验证它首先搜索 attrs['fields']
散列值,如果没有找到,它会从父 class 调用 method_missing
,在 attrs
.
attrs
显然是在初始化对象时设置的。您如何初始化示例中的对象?
我正在使用 jira-ruby 库,并且扩展了 JIRA::Resource::Issue
class 如下定义。
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
class,但我不确定我是否清楚地了解它如何将我在 class 上的方法调用映射到属性散列,或者为什么我的扩展 class 不做同样的事情。
在ruby中,当找不到调用的方法时,调用方法method_missing
,传递方法名、参数和调用中使用的块。 JIRA::Resource::Issue
,有 method_missing
的定义:
https://github.com/sumoheavy/jira-ruby/blob/master/lib/jira/resource/issue.rb#L89
在定义中可以验证它首先搜索 attrs['fields']
散列值,如果没有找到,它会从父 class 调用 method_missing
,在 attrs
.
attrs
显然是在初始化对象时设置的。您如何初始化示例中的对象?