class Graph < ActiveRecord::Base
has_attached_file :data_source
pp self.method_defined? :fdsafdafewafd
pp self.method_defined? :data_source
self.data_source
end
上面的代码产生了一种有趣的互动,我不确定我理解。
self.method_defined? :fdsafdafewafd
可以预见,这会返回false
self.method_defined? :data_source
可以预见,这会返回true
self.data_source
这导致:
NoMethodError: undefined method `data_source' for
#<Class:0x0055dd1d71c6e0>
我的问题是,鉴于这个事实(我怀疑它与范围有关),为什么它上面的行返回true?如果在此范围内未定义方法,那么不应该使用method_defined?返回假?
答案 0 :(得分:1)
has_attached_file :data_source
将实例方法添加到名为Graph
的{{1}}类中。这就是data_source
返回self.method_defined? :data_source
的原因。
但是,当您执行true
(相当于self.data_source
)时,您将在Graph.data_source
类本身上调用方法:data_source
,该方法未定义;因此错误。您只能在Graph类的对象上调用该方法。
如果您要创建Graph的新实例化,例如Graph
,然后您可以按预期g = Graph.new
进行操作。