Seltsam Rails-Konsole Verhalten
-
12-10-2019 - |
Frage
Wenn ich eine mehrzeilige Anweisung in der Rails 3.0.1 Konsole auszuführen, geben Sie drücken nicht wirklich die Anweisung ausgeführt werden. Stattdessen geht es auf eine neue Konsolenlinie, und der Cursor nach rechts Tabbed wurde. Dann muss ich eine Basislinie (wie p "hey"
) laufen, und dann die mehrzeiligen Anweisung ausgeführt wird.
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"
Ich habe für eine Weile es so tun, und es arbeitet in Ordnung. Aber jetzt habe ich ein Problem in der Konsole bekam und es könnten verwandt sein. Wenn ich lief den obigen Code, statt es, wie es funktioniert normalerweise der Fall ist, ging es nur um eine neue Konsolenlinie mit einem? hinzugefügt
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 ?>
Wenn es dies tut, kann ich nicht die Konsole verlassen
ruby-1.9.2-p0 ?> exit
ruby-1.9.2-p0 ?> ^C
beziehen sich diese Probleme? Wie kann ich sie lösen?
Lösung
In der Zeile:
images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;
Sie haben eine end
die if
zu schließen, aber keine end
den do
Block des each
zu schließen.
Aus diesem Grunde ist die Konsole der Abfrage, um weitere Eingabe wird erneut angezeigt, bevor Sie Ihre Anweisungen ausgeführt werden.
Versuchen Sie:
images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;end
Beachten Sie, werden Sie das gleiche Verhalten mit Klammern sehen. irb
oder console
wird nicht ausgeführt, bis die Klammern z balancieren.
irb(main):010:0> (3 *
irb(main):011:1* (2 + 1)
irb(main):012:1> )
=> 9
Andere Tipps
Keine Ahnung, was los ist mit irb / console aber Ihr Ruby-Code könnte viel schöner aussehen:
images = Image.all.each { |im| im.save if im.imagestore_width.blank? }
Der allgemeine Konsens ist, zu verwenden {} anstatt do / end für Einleitungs-Blöcke in Ruby.