我正在尝试根据以下内容为我的库代码进行自己的配置: 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
configure' for Imodule:Module (NoMethodError)<top (required)>': undefined method
您发布的代码没有任何问题,除非在
lib/imodule/imodule.rb
中调用之前未加载config/initializers/imodule.rb
中的代码。
看起来这是在一个名为
imodule
的 Rails 应用程序中,因此 Imodule
被定义为应用程序模块,这解释了为什么在未加载模块代码时只有 NoMethodError
而不是 NameError
.
Rails 不会自动要求
lib
目录中的文件,因此在文件顶部添加 require 'imodule/imodule'
将解决该问题。