Ruby 在模型中包含自定义模块后注释gem不工作
在模型中包含自定义模块后,请注释“停止工作”并给出错误: 我的模型:app/models/hotel.rbRuby 在模型中包含自定义模块后注释gem不工作,ruby,Ruby,在模型中包含自定义模块后,请注释“停止工作”并给出错误: 我的模型:app/models/hotel.rb class Hotel < ActiveRecord::Base include HotelHandler ... end 这给了我一个错误: 未初始化的常量Hotel::HotelHandler(NameError) 如果要在普通的旧Ruby项目中设置Rails样式的自动和快速加载,现代方法是使用: 这实际上只是一个简单的示例,您通常会将此逻辑封装到一个引导映射文
class Hotel < ActiveRecord::Base
include HotelHandler
...
end
这给了我一个错误:
未初始化的常量Hotel::HotelHandler(NameError)
如果要在普通的旧Ruby项目中设置Rails样式的自动和快速加载,现代方法是使用:
这实际上只是一个简单的示例,您通常会将此逻辑封装到一个引导映射文件和一个“应用程序”类中。如果您执行
include::HotelHandler
,它是否仍然会给您错误?是,它仍然给我同样的错误你如何命名包含HotelHandler
的文件以及你把它放在哪里?尝试require\u relative'../helpers/hotel\u handler'
如果它不是Rails项目,你可能没有autoloader设置(),你需要的是为你的应用程序要求或设置autoloader(超出本问题的范围)
module HotelHandler
...
end
# this file would be the "entry path" to your application such as config.ru
# loads an installs gems inline
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'zeitwerk'
end
root = Pathname.new(File.expand_path(__dir__))
env = ENV.fetch("MYAPP_ENV", 'development')
loader = Zeitwerk::Loader.new
# Mimics Rails by adding every subdirectory of `/app` and `/app/**/concerns`
# as "root directories" where zeitwerk will find top level constants
paths = [
dir[root.join('app/*/')]
dir[root.join('app/**/concerns')]
].flatten.each do |path|
loader.push_dir(path) if File.directory?(path)
end
# makes zeitwerk reload classes when they change
loader.enable_reloading if env == 'development'
loader.setup
# loads all classes on boot for performance
loader.eager_load if env == 'production'