2013-03-31 40 views
6

Tôi đang chạy một kịch bản (mà một người bạn tôi đã mất liên lạc với viết cho tôi.) Nó bắt đầu như thế này:liên tục chưa được khởi tạo ActiveRecord (NameError)

require 'ruby-debug' 
require 'circle' 

first_circle=Circle.new() 
@number_of_rounds=1 

Nhưng tôi tiếp tục nhận được thông báo lỗi này:

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

Tôi nên làm gì?

+0

Bạn có chắc bạn' đã cài đặt đá quý? 'gem install circle' sẽ có tất cả các phụ thuộc được cài đặt. –

Trả lời

2

Bạn cần phải

gem install activerecord 

Hope this helps.

7

Điều này đã được đăng chéo tới ruby-talk.

ActiveRecord là một lớp nói chuyện với cơ sở dữ liệu, đá quý này được mong đợi sẽ được chạy trong một bối cảnh với kết nối cơ sở dữ liệu với ActiveRecord được tải. Nếu bạn đang ở trong Rails, điều đó có nghĩa là tải môi trường Rails của bạn. Hoặc nếu chỉ ActiveRecord, một cái gì đó như thế này sẽ làm việc:

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 

Nhưng thành thật mà nói, nếu bạn không biết những gì ActiveRecord là, sau đó có vẻ như không thể xảy ra rằng đá quý này sẽ được giải quyết vấn đề cho bạn. Ngoài ra, tôi muốn được một chút hoài nghi của đá quý này, nó có một misspelling in its migration sao cho nó không thực sự làm việc trừ khi bạn đi sửa chữa nó. Điều này đã bị hỏng trong ít nhất 7 tháng mà không được sửa chữa. Có < 800 lượt tải xuống của đá quý, không nhiều (ít người dùng = ít người tìm và sửa lỗi) và dường như tác giả không có ý định duy trì nó.


Được rồi, tôi vừa nhận ra điều thực sự xảy ra. Mất khoảng 20 phút để viết lên trên, và nó có thể giúp một người nào đó sau đó googling cho một vấn đề, vì vậy tôi sẽ rời khỏi nó. Điều thực sự xảy ra, Tôi nghi ngờ, là bạn có một viên ngọc trên hệ thống của bạn có tên là vòng tròn, và bạn có một tập tin có thể trong cùng một thư mục có tên là vòng tròn. Đường dẫn tải của bạn không được thiết lập đúng cách, vì vậy khi bạn require 'circle', nó đang tìm kiếm đá quý chứ không phải tệp bạn đã viết. Một câu trả lời đơn giản là để nói require File.dirname(__FILE__) + '/circle' thay vì require 'circle' Đây không thực sự là câu trả lời đúng, nhưng nó sẽ hoạt động mà không đi vào vô số các sắc thái cần thiết để tìm ra điều đúng là gì. Nếu bạn muốn tìm ra điều đúng, tôi cần biết bạn đang sử dụng phiên bản Ruby nào, bạn định sử dụng và gọi mã này như thế nào, và cấu trúc thư mục của bạn trông như thế nào.

Ngoài ra. Nếu bạn đã nói rằng circle.rb là một tập tin trong cùng một thư mục, sau đó tôi sẽ không mất 20 phút với câu trả lời hàng đầu. Bạn nên cung cấp đầy đủ ngữ cảnh trong tương lai để hiểu vấn đề.

+0

+ 1 để chọn để ở đây. @ JonathanKav - nếu bạn quan tâm đến việc tìm hiểu điều này, bạn có thể vui lòng chỉnh sửa câu hỏi của mình bằng các yếu tố đầu vào mà Joshua đang yêu cầu không? Ít nhất có thể làm là nâng cao vấn đề trong Github. –

+0

yêu cầu 'active_record' thực hiện thủ thuật – d1jhoni1b

+0

Vâng, câu hỏi này không thực sự chung chung, nó rất cụ thể đối với codebase của người dùng này. –

6

Từ trang này là người đầu tiên đi ra khi googling được thông báo lỗi, nó có thể giúp cần lưu ý rằng thông báo lỗi này có thể arrise khi cố gắng chạy rspec trên app/models/... thay vì spec/models/...

Các vấn đề liên quan