命名空间模块 class 方法未定义

Namespace module class methods undefined

出于命名空间的原因,我正在尝试使用模块。我在 /lib/reports/stripe.rb 的 Rails 应用程序中找到了这个文件。

module Reports
  module Stripe
    def self.foo
      puts 'i am foo'
    end
  end
end

在我的控制台中,我希望能够通过 Reports::Stripe.fooReports::Stripe::foo 调用 foo,但我收到错误

NoMethodError: undefined method `foo' for Reports::Stripe:Module

我做错了什么?如果有更好的方法来组织位置和命名空间,也请随时告诉我。

ruby 中的所有方法调用都使用 . 语法。甚至 "module" 方法。

> Reports::Stripe.foo
i am foo

如果您在启动 rails 控制台后添加该方法,您可能会收到错误 NoMethodError: undefined method 'foo' for Reports::Stripe:Module。尝试重新启动控制台或使用 load 'reports/stripe'.

重新加载文件

文件实际位于 /lib/reports/stripe/stripe.rb。这是我早先犯的一个错误,但忘了改正。将文件移动到 /lib/reports/stripe.rb 解决了问题。