Buenas!
Un poco de Ruby On Rails hoy. Estuve programando mucho con Sublime (Despues les cuento como configurarlo en otro post :)) en este lenguaje. Como con Sublime es imposible debuggear con Ruby, me hice muy amigo de la consola de Ruby (irb) y de la consola de Rails.
La Rails Console es igual a la consola de Ruby, solo que levanta todo el entorno rails, permitiendo hacer queries a la base de datos, probar los modelos, probar los controllers, etc.
Yo estuve trabajando el otro dia con ActiveResource y no lo podia hacer andar! Para probarlo, usaba la Rails Console. Cuando veia que no andaba, probaba cambiar algo en el codigo y bajaba la consola y la volvia a levantar. Esto implicaba que tenia que hacer los requires de vuelta y crear el “contexto” para poder probarlo de vuelta en la consola.
Es en este momento cuando encontre la solucion. **La cosola de Rails tiene un comando llamado **reload! el cual traera todos los cambios realizados a las clases a la consola ya abierta. Cual es la ventaja de este comando? Que los objetos ya creados de esta clase modificada, seguiran existiendo, y su clase sera modificado, permitiendo que podamos ver estos cambios en tiempo real.
Esto que quiere decir?
Suponganse que tenemos los siguiente:
class HelloString < ActiveRecord::Base
end
Y levantamos la consola de rails corriendo rails console. Ahora suponganse que corremos la siguiente linea:
1.9.2p320 :003 > HelloString.new.hello
NoMethodError: undefined method `hello' for #
from (irb):3
from /home/gonto/.rvm/rubies/ruby-1.9.2-p320/bin/irb:16:in `'
1.9.2p320 :004 >
Como vemos, nos tira un error diciendo que el metodo hello no existe. Ahora, editemos la clase anterior en Sublime Text 2 y pongamos:
class HelloString < ActiveRecord::Base
def hello
"Hola Gonto"
end
end
Ahora, corremos en la consola HelloString.new.hello y aun nos tirara la excepcion. Sin embargo, si ahora tocamos reload!, y luego corremos lo mismo que antes veremos:
1.9.2p320 :009 > HelloString.new.hello
=> "Hola Gonto"
1.9.2p320 :010 >
Excelente, no?