Rails 4未定义的ActiveModel公共方法

时间:2014-01-07 00:44:16

标签: ruby-on-rails ruby-on-rails-4

我有一个干净的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)

我很傻到为什么不包括这个方法。有任何想法吗?我已重新加载并重新启动控制台并确保代码已保存。

1 个答案:

答案 0 :(得分:1)

您是如何定义方法的?请注意,如果您将其定义为

class Foo
  def bar 
    "hello"
  end
end

然后barFoo类的实例方法,您只能在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