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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top