我正在尝试将模块用于命名空间的原因。我在/lib/reports/stripe.rb
的Rails应用程序中找到了此文件。
module Reports
module Stripe
def self.foo
puts 'i am foo'
end
end
end
在我的控制台中,我希望能够通过Reports::Stripe.foo
或Reports::Stripe::foo
来调用foo,但是我收到了错误
NoMethodError: undefined method `foo' for Reports::Stripe:Module
我做错了什么?如果有更好的方法来组织位置和命名空间,也请随时告诉我。
答案 0 :(得分:2)
ruby中的所有方法调用都使用.
语法。甚至"模块"方法
> Reports::Stripe.foo
i am foo
如果在启动rails控制台后添加了方法,则可能收到错误NoMethodError: undefined method 'foo' for Reports::Stripe:Module
。尝试重新启动控制台或使用load 'reports/stripe'
重新加载文件。
答案 1 :(得分:0)
该文件实际上位于/lib/reports/stripe/stripe.rb
。这是我早些时候做的一个错误,但忘了修理。将文件移至/lib/reports/stripe.rb
解决了问题。