2013-03-31 15 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>' 

どうすればよいですか?あなたは

gem install activerecord 

に必要

+0

上のあなたは「あなたがよろしいです宝石をインストールしましたか? 'gem install circle'はすべての依存関係をインストールする必要があります。 –

答えて

2

は、この情報がお役に立てば幸いです。

7

これはruby-talkにクロスポストされました。

ActiveRecordは、データベースと通信するクラスです。この宝石は、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という名前の宝石があり、あなたはおそらくcircleという名前の同じディレクトリにあります。あなたのロードパスが正しく設定されていないので、require 'circle'と書いたファイルではなく、宝石を見つけることになります。単純な答えは、require 'circle'の代わりにrequire File.dirname(__FILE__) + '/circle'と言います。これは本当に正しい答えではありませんが、正しいことが何であるかを理解するために必要な無数のニュアンスに入ることなく動作します。正しいことが分かりたいのであれば、Rubyのバージョン、このコードをどのように使用して呼び出すのか、ディレクトリ構造がどのようになっているのかを知る必要があります。

また、もしあなたがcircle.rbが同じディレクトリ内のファイルであると言えば、私はトップの答えで20分も失っていないでしょう。問題を理解するには、将来的に十分なコンテキストを提供する必要があります。このページには、エラーメッセージをグーグルとき出てきた最初のものであるので、それを実行しようとしたときにこのエラーメッセージがarriseできることに注意することは役立つかもしれない

+0

+1をここに残しておきます。 @ジョナサン・カヴァー - もしあなたがこれの底に到達することに興味があれば、あなたはジョシュアが求めている質問をあなたの質問に編集できますか?少なくともGithubで問題を提起することができます。 –

+0

require 'active_record'トリックをしました – d1jhoni1b

+0

ええ、この質問は本当に一般的ではありません。このユーザーのコードベースに特有のものです。 –

6

RSpecのapp/models/...代わりのspec/models/...

関連する問題