1

我正在尝试根据以下内容为我的 lib 代码进行自己的配置: https ://robots.thoughtbot.com/mygem-configure-block

lib/imodule/imodule.rb:

module Imodule
  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  class Configuration
    attr_accessor :api_key
    attr_reader :api_url

    def initialize
      @api_url = 'https://api.test.com'
    end
  end
end

初始化程序/imodule.rb:

Imodule.configure do |c|
  c.api_key = '4db6-93b3'
end

但我得到:

/home/user/Documents/Projects/imodule/config/initializers/imodule.rb:2:in <top (required)>': undefined methodconfigure' for Imodule:Module (NoMethodError)

4

1 回答 1

1

您发布的代码没有任何问题,只有在lib/imodule/imodule.rb调用 in 之前未加载代码 in config/initializers/imodule.rb

看起来这是在一个名为 的 Rails 应用程序中imodule,因此被定义为应用程序模块,解释了为什么在未加载模块代码时您Imodule将只有 aNoMethodError而不是 a 。NameError

Rails 不会自动要求目录中的lib文件,因此require 'imodule/imodule'在文件顶部添加将解决问题。

于 2017-08-07T21:41:38.333 回答