2012-06-27 10 views
15

Sto imparando a risolvere il problema della console Rails e trovandolo utile per testare rapidamente i metodi nelle mie classi. So che posso apportare modifiche per i miei modelli, poiQuali sono i motivi "ricarica!" non sembra funzionare sempre nella console di Rails?

> reload! 

per afferrare quegli aggiornamenti, ma a volte mi troverò che non sembra di ricaricare il mio ultimo codice. Il codice di cache di Rails è da qualche parte?

In davvero un semplice esempio di pseudo, io possa avere cattivo codice on line 100:

100: u = User.alll 

e nella console Rails, quando si esegue questo metodo, potrei avere un errore simile a:

NoMethodError: undefined method `alll' for User:Class ... on line 100 

quindi modificare il mio codice, fissando l'errore

100: u = User.all 

quindi ricaricare:

> reload! 

e poi, quando si chiama il metodo in questa classe che ha il codice corretto, ancora dirà

NoMethodError: undefined method `alll' for User:Class ... on line 100 

quando chiaramente, l'errore è fisso, e la linea incriminata non è nemmeno sulla linea 100 più. C'è un modo per forzare/resettare a fondo la "ricarica!" comando?

risposta

22

La mia ipotesi è che si sta facendo qualcosa di simile:

  1. creare un'istanza di User
  2. chiamata someMethod nell'istanza
  3. si ottiene un errore, e si va e fissarlo
  4. reload!
  5. ti chiamano someMethodsulla istanza esistente e ottieni nuovamente l'errore

Quindi stai chiamando il metodo su un'istanza che non è stata ricaricata. La sua classe è stata ricaricata, ma l'istanza è già in memoria - con bug e tutto il resto.

Questa sarebbe la mia ipotesi almeno (non sicura al 100%).

Il punto è, se si crea una nuova istanza dopo il reload! e si chiama il metodo su quella nuova istanza, dovrebbe smettere di lamentarsi.

+0

Sì, questo era esattamente il problema. Le istanze create non "ricaricano". Dopo aver ricaricato e re-istanziato, le cose funzionano alla grande ogni volta. Grazie @flambino – jbnunn

Problemi correlati