运行Ruby Mongoid代码出现uninitialized constant NameError错误如何解决
问题排查与解决步骤
1. 加载Bundler管理的依赖
直接运行ruby populate_database.rb不会自动加载Gemfile中声明的依赖,导致Mongoid未被引入,触发未初始化常量的报错。
你可以二选一解决:
- 在
populate_database.rb的最开头添加两行代码,手动加载Bundler依赖:
require 'bundler/setup' Bundler.require(:default)
- 运行脚本时添加
bundle exec前缀,由Bundler自动加载依赖:
bundle exec ruby populate_database.rb
2. 补充Mongoid数据库连接配置
你还没有为Mongoid配置MongoDB的连接信息,需要在引入search_term模型前添加连接配置:
Mongoid.configure do |config| config.clients.default = { # 替换为你本地MongoDB的连接地址、自定义数据库名 uri: "mongodb://localhost:27017/business_db" } end
3. 修复文档保存方法的错误
你当前代码中使用的s_term.post不是Mongoid的文档保存方法,需要替换为正确的save方法,建议加!后缀可以抛出保存异常,方便排查问题:
s_term.save!
4. 完整修复后代码示例
修改后的populate_database.rb完整代码如下:
require 'bundler/setup' Bundler.require(:default) # Mongodb连接配置 Mongoid.configure do |config| config.clients.default = { uri: "mongodb://localhost:27017/business_db" } end require_relative 'search_term' business_list = [ 'business name 1', 'business name 2', 'business name 3', 'business name 4', ] business_list.each do |business| s_term = SearchTerm.new s_term.search_term = business s_term.save! end
运行上述代码后,即可在MongoDB Compass对应数据库的search_terms集合中查看到写入的文档。
内容的提问来源于stack exchange,提问作者joao_viccari
相关产品推荐
相关产品推荐

