2013-03-31 135 views
6

我运行一个脚本(即我一个朋友失去了联系写给我的。)它开始是这样的:未初始化的常量的ActiveRecord(NameError)

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>' 

我该怎么办?

+0

你肯定你”已经安装了宝石? 'gem install circle'应该安装所有的依赖关系。 –

回答

2

您需要

gem install activerecord 

希望这有助于。

7

这是交叉过帐到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的是什么,那么它似乎是不可思议的这个宝石将解决你的问题。另外,我会对这颗宝石持怀疑态度,它有一个misspelling in its migration,除非你去修复它,否则它实际上并不工作。这已被破坏至少7个月而未被修复。有<宝石800下载,这并不是很多(很少用户=找到和修复错误的人更少),并且它看起来不像作者打算维护它。


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

另外。如果你会说circle.rb是同一个目录下的一个文件,那么我将不会因为答案最高而丢失20分钟。您应该在将来提供足够的背景以了解问题。

+0

+ 1选择离开它。 @JonathanKav - 如果您有兴趣了解这一点,请问您可以通过Joshua要求的输入来编辑您的问题吗?最少可以做的是在Github中引发问题。 –

+0

要求'active_record'诀窍 – d1jhoni1b

+0

是的,这个问题并不是很普遍,它对这个用户的代码库非常具体。 –

6

由于此页面是第一次出来google搜索错误消息时,它可能会帮助需要注意的是此错误消息可以arrise当试图运行rspec的app/models/...而不是spec/models/...

相关问题