2011-10-07 31 views
5

Tôi có một trường hợp đơn giản, liên quan đến hai lớp mô hình:(Object không hỗ trợ #inspect)

class Game < ActiveRecord::Base 
    has_many :snapshots 

    def initialize(params={}) 
    # ... 
    end 
end 

class Snapshot < ActiveRecord::Base 
    belongs_to :game 

    def initialize(params={}) 
    # ... 
    end 
end 

với những cuộc di cư:

class CreateGames < ActiveRecord::Migration 
    def change 
    create_table :games do |t| 
     t.string :name 
     t.string :difficulty 
     t.string :status 

     t.timestamps 
    end 
    end 
end 

class CreateSnapshots < ActiveRecord::Migration 
    def change 
    create_table :snapshots do |t| 
     t.integer :game_id 
     t.integer :branch_mark 
     t.string :previous_state 
     t.integer :new_row 
     t.integer :new_column 
     t.integer :new_value 

     t.timestamps 
    end 
    end 
end 

Nếu tôi cố gắng để tạo ra một trường hợp Snapshot ở ray giao diện điều khiển, sử dụng

Snapshot.new 

tôi nhận được

(Object doesn't support #inspect) 

Bây giờ là phần tốt. Nếu tôi nhận xét phương thức khởi tạo trong snapshot.rb, thì Snapshot.new hoạt động. Tại sao chuyện này đang xảy ra?
BTW Tôi đang sử dụng Rails 3.1 và Ruby 1.9.2

+0

Mặc dù nó có thể không phải là vấn đề của bạn, điều này xuất hiện khi có lỗi trong phương thức 'kiểm tra' tùy chỉnh. Lỗi ban đầu không hiển thị, điều này có thể gây phiền toái. –

Trả lời

9

Điều này xảy ra vì bạn ghi đè phương thức initialize của lớp cơ sở (ActiveRecord :: Base). Các biến thể hiện được xác định trong lớp cơ sở của bạn sẽ không được khởi tạo và #inspect sẽ không thành công.

Để khắc phục vấn đề này, bạn cần phải gọi super trong lớp phụ của bạn:

class Game < ActiveRecord::Base 
    has_many :snapshots 

    def initialize(params={}) 
    super(params) 
    # ... 
    end 
end 
+0

Tại sao bạn chuyển thông số cho siêu? ActiveRecord :: Base sẽ làm gì với nó? –

0

Tôi không chắc chắn chính xác lý do tại sao, nhưng tôi đã nhận lỗi này khi tôi vô tình sai chính tả 'belongs_to' là 'belong_to' trong định nghĩa lớp liên quan.

7

Tôi đã có triệu chứng này khi tôi đã có một serialize trong một mô hình như thế này;

serialize :column1, :column2 

Cần phải có;

serialize :column1 
serialize :column2 
+0

và tôi đã viết 'serialize: description, Array' inproperly (như' serialize: description,: array') – lakesare

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