ruby - 未初始化的常量 ActiveRecord (NameError)

标签 ruby activerecord

我正在运行一个脚本(一个我失去联系的 friend 为我写的。)它是这样开始的:

require 'ruby-debug'
require 'circle'

first_circle=Circle.new()
@number_of_rounds=1

但我不断收到此错误消息:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/circle-0.0.2/lib/circle/models/friendship.rb:1:in
`<top (required)>': uninitialized constant ActiveRecord (NameError)
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in
`require'
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in
`require'
  from
C:/Ruby193/lib/ruby/gems/1.9.1/gems/circle-0.0.2/lib/circle/circle.rb:1:in
`<top (required)>'
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in
`require'
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in
`require'
  from
C:/Ruby193/lib/ruby/gems/1.9.1/gems/circle-0.0.2/lib/circle.rb:7:in
`<top (required)>'
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in
`require'
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in
`rescue in require'
  from
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in
`require'
  from primes.rb:5:in `<main>'

我该怎么办?

最佳答案

这被交叉发布到 ruby-talk .

ActiveRecord 是一个与数据库对话的类,这个 gem 期望在加载了与 ActiveRecord 的数据库连接的上下文中运行。如果您使用的是 Rails,则意味着加载您的 Rails 环境。或者如果只是 ActiveRecord,像这样的东西会起作用:

require 'active_record'
require 'circle'

ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
ActiveRecord::Schema.define do
  self.verbose = false

  create_table :users do |t|
    t.string  :name
    t.integer :friends_count, :default => 0, :null => false
  end

  create_table :friendships, :force => true do |t|
    t.references :user, :friend
    t.datetime :requested_at, :accepted_at, :denied_at, :blocked_at
    t.string :status
    t.timestamps
  end

  create_table :blocked_users, :force => true do |t|
    t.references :user, :blocked_user
    t.timestamps
  end

  change_table :friendships do |t|
    t.index :user_id
    t.index :friend_id
    t.index :status
  end

  change_table :blocked_users do |t|
    t.index :user_id
    t.index :blocked_user_id
  end
end

class User < ActiveRecord::Base
  has_circle
end

john = User.create! name: 'john'
mary = User.create! name: 'mary'
paul = User.create! name: 'paul'

john.befriend(mary)
john.friends?(mary)               # => false
mary.accept_friend_request(john)
mary.friends?(john)               # => true

但老实说,如果您不知道 ActiveRecord 是什么,那么这个 gem 似乎不太可能为您解决问题。另外,我对这个 gem 有点怀疑,它有一个 misspelling in its migration除非您去修复它,否则它实际上不起作用。这已经坏了至少 7 个月而没有得到修复。这个 gem 的下载量不到 800 次,这并不多(用户很少 = 发现和修复错误的人更少),而且看起来作者并不打算维护它。


好吧,我刚刚意识到实际发生了什么。花了大约 20 分钟把它写在上面,它可能会帮助以后用谷歌搜索问题的人,所以我要离开它。 我怀疑,真正发生的事情是您的系统上有一个名为 circle 的 gem,并且您在同一目录中可能有一个名为 circle 的文件。您的加载路径设置不正确,因此当您需要'circle' 时,它正在查找 gem 而不是您编写的文件。一个简单的答案是说 require File.dirname(__FILE__) + '/circle' 而不是 require 'circle' 这不是正确的答案,但它会工作而无需考虑弄清楚什么是正确的事情所需的无数细微差别。如果您想弄清楚什么是正确的,我需要知道您使用的是哪个 Ruby 版本,您打算如何使用和调用此代码,以及您的目录结构是什么样的。

还有。如果您会说 circle.rb 是同一目录中的一个文件,那么我不会在最佳答案上浪费 20 分钟。您应该在将来提供足够的上下文来理解问题。

关于ruby - 未初始化的常量 ActiveRecord (NameError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731068/

相关文章:

ruby - 安装 Foundation 5 时出现问题?

mysql - 无法获得适用于 has_many 的动态条件 :through (+ ownership)

ruby-on-rails - rails : ActiveRecord query based on association value

sql - activerecord 相当于 SQL 'minus'

ruby-on-rails - ActiveRecord 验证失败后如何将内容保存到数据库?

ruby-on-rails - 如何防止 find_by 将 nil 添加到数组

ruby - require ' ' 突然停止在 ruby​​ 脚本中工作

ruby-on-rails - ActiveRecord 存在吗?与协会

ruby-on-rails - 按周/月/等和 ActiveRecord 分组?

ruby-on-rails - Rails 2.3.8 属性读取错误