Странное поведение консоли Rails - PullRequest
3 голосов
/ 19 января 2011

Когда я запускаю многострочный оператор в консоли Rails 3.0.1, нажатие ввода фактически не запускает оператор.Вместо этого он переходит на новую консольную строку, и курсор был вставлен справа.Затем мне нужно выполнить базовую строку (например, 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

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

Ответы [ 2 ]

4 голосов
/ 19 января 2011

В строке:

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
1 голос
/ 19 января 2011

Не знаю, что не так с irb / console, но ваш код ruby ​​может выглядеть намного лучше:

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

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

...