【问题标题】:undefined method `get_category' for TestObserver:ClassTestObserver:Class 的未定义方法“get_category”
【发布时间】:2015-05-28 23:17:12
【问题描述】:

在TestObserver 类中,我有self.delivered_email(message) 方法,消息是action mailer 实例,我在self.delivered_email 方法中调用get_category 方法。但我收到错误消息“TestObserver:Class 的未定义方法 `get_category'”。问题是什么,我该如何解决?我在 Rails 中使用了观察者模式。

class TestObserver
  def self.delivered_email(message)
    begin
      category = get_category(message)
      # do something here
    rescue => ex
      # do something here
    end
  end

  private
  def get_category(message)
    # do something here 
  end
end

ActionMailer::Base.register_observer(TestObserver)

【问题讨论】:

  • 您从类的角度调用get_category,因此您需要将该方法定义为类方法。就做def self.get_category(message); end

标签: ruby-on-rails ruby


【解决方案1】:

这是因为,您正在尝试从类方法访问实例方法

您的self.delivered_email 是一个类级别的方法,如果它调用其他方法,那么这些方法也应该是类方法。在这种情况下,get_category(message) 是一个实例方法。

要修复错误,您可以将get_category(message) 作为类方法。 (如果它适合您的上下文)

class TestObserver
  def self.delivered_email(message)
    begin
      category = get_category(message)
      # do something here
    rescue => ex
      # do something here
    end
  end


  def self.get_category(message)
    # do something here 
  end
end

【讨论】:

  • 我明白了。为什么类方法只能调用类方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2013-06-11
  • 1970-01-01
  • 2010-12-30
  • 2019-12-25
  • 2021-07-25
  • 2019-06-20
相关资源
最近更新 更多