2011-10-07 10 views
5

Ho un caso semplice, che coinvolge due classi del modello:(Oggetto non supportare #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 

con queste migrazioni:

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 

Se tento di creare un'istanza Istantanea rotaie console, utilizzando

Snapshot.new 

ottengo

(Object doesn't support #inspect) 

Ora per la parte buona. Se commento il metodo di inizializzazione in snapshot.rb, allora Snapshot.new funziona. Perché sta succedendo?
BTW sto usando Rails 3.1 e Ruby 1.9.2

+0

Anche se potrebbe non esserci stato il problema, questo si verifica quando si verifica un errore in un metodo personalizzato 'inspect'. L'errore originale non è visibile, il che può essere fastidioso. –

risposta

9

questo sta accadendo perché l'override del metodo della classe base (ActiveRecord :: Base) initialize. Le variabili di istanza definite nella classe base non verranno inizializzate e #inspect avrà esito negativo.

Per risolvere questo problema è necessario chiamare super nella classe sub:

class Game < ActiveRecord::Base 
    has_many :snapshots 

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

Perché stai passando params a super? Cosa farebbe ActiveRecord :: Base? –

0

io non so esattamente perché, ma ho ottenuto questo errore quando ho accidentalmente scritto male 'belongs_to' come 'belong_to' in la definizione di classe associata.

7

Ho avuto questo sintomo quando ho avuto un serialize in un modello come questo;

serialize :column1, :column2 

Devono essere come;

serialize :column1 
serialize :column2 
+0

e ho scritto 'serialize: description, Array' inproperly (come' serialize: description,: array') – lakesare

Problemi correlati