2011-10-07 103 views
5

我有一個簡單的例子,涉及到兩個模型類:(對象不支持#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 

與這些遷移:

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 

如果我試圖在創建快照實例軌道控制檯,使用

Snapshot.new 

我得到

(Object doesn't support #inspect) 

現在是好的部分。如果我註釋掉snapshot.rb中的初始化方法,那麼Snapshot.new將起作用。這是爲什麼發生?
順便說一句我正在使用Rails 3.1和Ruby 1.9.2

+0

雖然它可能不是你的問題,但是當自定義「檢查」方法中出現錯誤時會出現此問題。原始錯誤不可見,這可能很煩人。 –

回答

9

發生這種情況是因爲您覆蓋了基類(ActiveRecord :: Base)的initialize方法。在您的基類中定義的實例變量將不會被初始化,並且#inspect將會失敗。

爲了解決這個問題,你需要調用super在你的子類:

class Game < ActiveRecord::Base 
    has_many :snapshots 

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

爲什麼你將params傳遞給super? ActiveRecord :: Base會用它做什麼? –

0

我不知道確切原因,但我得到了,當我不小心拼錯「belongs_to的」作爲「belong_to」這個錯誤相關的類定義。

7

我有這樣的症狀,當我有一個像這樣的模型序列化;

serialize :column1, :column2 

需要像;

serialize :column1 
serialize :column2 
+0

我寫了'serialize:description,Array'不當(如'serialize:description,:array') – lakesare