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