Вопрос

Когда я запускаю многострочный оператор в консоли Rails 3.0.1, нажатие Enter на самом деле не запускает оператор. Вместо этого он идет на новую консольную линию, и курсор был вставлен вправо. Тогда мне нужно запустить базовую линию (например p "hey"), а затем будет работать многострочный оператор.

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

Когда это произойдет, я не могу выйти из консоли

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

Связаны ли эти проблемы? Как я могу их исправить?

Это было полезно?

Решение

В линии:

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

У тебя есть end Чтобы закрыть if но не end Чтобы закрыть do блок each.

Вот почему консоль заново вызывает приглашение с просьбой получить больше ввода перед выполнением ваших операторов.

Пытаться:

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

Обратите внимание, вы увидите то же поведение с кронштейнами. irb или же console не будет выполняться, пока кронштейны, например, сбалансировать

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

Другие советы

Не так, что случилось с IRB/консоли, но ваш код Ruby может выглядеть намного приятнее:

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

Общий консенсус состоит в том, чтобы использовать {}, а не делать/конец для однострочных блоков в Ruby.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top