Question

Quand je lance une déclaration sur plusieurs lignes dans les Rails 3.0.1 console, appuyez sur Entrée ne fonctionne pas en fait la déclaration. Au lieu de cela, il va à une nouvelle ligne de la console, et le curseur a été onglets à droite. Ensuite, je dois exécuter une ligne de base (comme p "hey"), puis la déclaration sur plusieurs lignes courrai.

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"

Je l'ai fait comme ça pendant un certain temps et il fonctionnait bien. Mais maintenant, j'ai un problème dans la console et il pourrait être lié. Quand je courais le code ci-dessus, au lieu de fonctionner comme il le fait normalement, il vient de passer à une nouvelle ligne de la console avec un? ajouté

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 ?>

Quand il fait cela, je ne peux pas quitter la console

ruby-1.9.2-p0 ?>  exit
ruby-1.9.2-p0 ?>  ^C

Ces problèmes sont liés? Comment puis-je les corriger?

Était-ce utile?

La solution

Dans la ligne:

images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;

Vous avez un end pour fermer la if mais pas end pour fermer le bloc do du each.

Ceci est la raison pour laquelle la console est réafficher l'invite pour demander plus d'entrée avant d'exécuter vos instructions.

Essayez:

images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;end

Remarquez, vous verrez le même comportement avec des supports. irb ou console ne seront pas exécutés jusqu'à ce que les crochets équilibre par exemple.

irb(main):010:0> (3 *
irb(main):011:1* (2 + 1)
irb(main):012:1> )
=> 9

Autres conseils

ne sais pas ce qui ne va pas avec irb / console mais votre code Ruby pourrait ressembler une plus belle beaucoup:

images = Image.all.each { |im| im.save if im.imagestore_width.blank? }

Le consensus général est d'utiliser {} plutôt que de faire / fin pour les blocs d'une seule ligne en rubis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top