【问题标题】:Rails 4 undefined public method for ActiveModelRails 4 未定义 ActiveModel 的公共方法
【发布时间】:2014-01-07 00:44:15
【问题描述】:

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

当检查模型的方法是否存在时,我得到一个 return false

Foo.methods.include?(:bar)

我对为什么不包含该方法感到目瞪口呆。有任何想法吗?我已重新加载并重新启动控制台,并确保代码已保存。

【问题讨论】:

  • 没有看到我们猜测的任何代码。

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


【解决方案1】:

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

class Foo
  def bar 
    "hello"
  end
end

那么barFoo 类的实例方法,您只能在Foo 的实例上调用它,而不能在类上调用它。

Foo.bar
# => NoMethodError
Foo.new.bar
# => "hello"

反之亦然,在这种情况下(注self

class Foo
  def self.bar 
    "hello"
  end
end

您正在定义一个类方法。

Foo.bar
# => "hello"
Foo.new.bar
# => NoMethodError

【讨论】:

  • 糟糕,太尴尬了。完全忘记将其定义为类方法-_-。谢谢提醒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多