我有一个干净的Rails 4.0.2和Ruby 2.0.0p353项目。
存在ActiveModel, Foo 。
我已经定义了一个名为 bar 的公共方法,它输出字符串“Hello World”
从控制台调用 Foo.bar 时,会引发“NoMethodError undefined method'bar'错误。”
我已经检查过模型是ActiveRecord :: Base的祖先,它返回true
Foo.ancestors.include?(ActiveRecord::Base)
当检查模型是否存在该方法时,我得到一个返回false
Foo.methods.include?(:bar)
我很傻到为什么不包括这个方法。有任何想法吗?我已重新加载并重新启动控制台并确保代码已保存。
答案 0 :(得分:1)
您是如何定义方法的?请注意,如果您将其定义为
class Foo
def bar
"hello"
end
end
然后bar
是Foo
类的实例方法,您只能在Foo
的实例上调用它,而不能在类上调用它。< / p>
Foo.bar
# => NoMethodError
Foo.new.bar
# => "hello"
反之亦然,在这种情况下(注意self
)
class Foo
def self.bar
"hello"
end
end
你正在定义一个类方法。
Foo.bar
# => "hello"
Foo.new.bar
# => NoMethodError