包含模块时未初始化的常量(NameError)

时间:2014-10-14 10:23:47

标签: ruby-on-rails class module gem

我正在为我的Rails应用程序编写gem,它计算一些东西并使用类和模块。

这是文件结构。

root
->lib
-->finances
--->version.rb
--->finances.rb
--->calculator
----->formulas.rb
--->finalize
---->schedule.rb
-->finances.rb

现在root/lib/finances.rb

require "finances/version"
require "finances/finances"
require "finances/finalize/schedule"
require "finances/calculator/formulas"

root/lib/finances/calculator/formulas.rb

module Calculator
  module Formulas
    def method
    end
  end
end

root/lib/finances/finalize/schedule.rb

module Finalize
  class Schedule
    include ::Calculator::Formulas
  end
end

但我得到uninitialized constant Calculator (NameError)

如果我尝试使用

::Calculator::Formulas.method

它抛出NoMethodError (undefined method方法' for Calculator :: Formulas:Model):`

我究竟做错了什么。我似乎无法解决这个问题。有谁可以帮忙。

1 个答案:

答案 0 :(得分:1)

您尝试将method用作Formulas'模块方法',而您将其定义为常规实例方法。所以它应该在RepaymentSchedule实例上调用:

rs = RepaymentSchedule.new
rs.method

此外,您需要确保加载顺序正确。在这里,您应该在加载require类之前Formulas包含Schedule模块的文件,否则您将获得未初始化的常量错误。