Rieles extraño comportamiento de la consola
-
12-10-2019 - |
Pregunta
Al ejecutar una declaración de varias líneas en los rieles 3.0.1 consola, pulsando Enter en realidad no ejecutar la instrucción. En su lugar, se va a una nueva línea de la consola, y el cursor se ha pestañas a la derecha. Entonces tengo que ejecutar una línea básica (como p "hey"
), y luego la declaración de varias líneas a correr.
ruby-1.9.2-p0 > images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;
ruby-1.9.2-p0 > p "hey"
Yo he estado haciendo así durante un tiempo y ha estado trabajando bien. Pero ahora tengo un problema en la consola y que podría estar relacionado. Cuando me encontré con el código anterior, en lugar de hacerlo funcionar como lo hace normalmente, sólo fue a una nueva línea de consola con un? añadido
ruby-1.9.2-p0 > images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;
ruby-1.9.2-p0 > p "hey"
ruby-1.9.2-p0 ?>
Cuando se hace esto, no puedo salir de la consola
ruby-1.9.2-p0 ?> exit
ruby-1.9.2-p0 ?> ^C
¿Se relacionan estos problemas? ¿Cómo puedo solucionarlo?
Solución
En la línea:
images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;
Tiene una end
para cerrar la if
pero no un end
para cerrar el bloque do
del each
.
Esta es la razón por la consola es su nueva presentación visual se le pregunte por más caracteres antes de ejecutar sus estados de cuenta.
Trate:
images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;end
Aviso, verá el mismo comportamiento con los soportes. irb
o console
no se ejecutará hasta que los soportes se equilibran por ejemplo.
irb(main):010:0> (3 *
irb(main):011:1* (2 + 1)
irb(main):012:1> )
=> 9
Otros consejos
No sé lo que está mal con el IRB / consola, pero su código de rubí podría parecer un montón más bonito:
images = Image.all.each { |im| im.save if im.imagestore_width.blank? }
El consenso general es utilizar {} en lugar de do / final de los bloques de una sola línea en rubí.