Strano comportamento Rails console
-
12-10-2019 - |
Domanda
Quando eseguo una dichiarazione più linee nei Rails 3.0.1 console, enter in realtà non eseguire l'istruzione. Invece, si va ad una nuova linea di console, e il cursore è stato a schede a destra. Poi devo eseguire una riga di base (come p "hey"
), e poi la dichiarazione multilinea 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"
ho fatto in questo modo per un po 'e sta lavorando bene. Ma ora ho un problema nella console e potrebbe essere correlato. Quando ho fatto funzionare il codice, invece di sopra di lavoro come normalmente fa, è appena andato a una nuova linea di console con un? aggiunto
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 ?>
Quando si fa questo, non posso uscire dalla console
ruby-1.9.2-p0 ?> exit
ruby-1.9.2-p0 ?> ^C
sono legati a questi problemi? Come posso risolvere il problema?
Soluzione
Nella riga:
images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;
Hai end
per chiudere la if
ma non un end
per chiudere il blocco do
del each
.
Questo è il motivo per cui la console è richiesto mostra di nuovo i pronta per più di ingresso prima di eseguire le sue dichiarazioni.
Prova:
images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;end
Si noti, si vedrà lo stesso comportamento con staffe. irb
o console
non verranno eseguiti fino a quando le staffe di equilibrio per es.
irb(main):010:0> (3 *
irb(main):011:1* (2 + 1)
irb(main):012:1> )
=> 9
Altri suggerimenti
Non so cosa c'è di sbagliato con IRB / console, ma il codice rubino potrebbe cercare un posto più bello sacco:
images = Image.all.each { |im| im.save if im.imagestore_width.blank? }
Il consenso generale è di usare {} invece di do / fine per blocchi a linea singola in Ruby.