Strange Rails控制台行为

时间:2011-01-19 10:15:45

标签: ruby-on-rails rails-console

当我在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

这些问题是否相关?我该如何修理它们?

2 个答案:

答案 0 :(得分:4)

在行中:

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

您要end关闭if而不是end关闭do的{​​{1}}块。

这就是控制台在执行语句之前重新显示询问更多输入的提示的原因。

尝试:

each

注意,您将看到括号中的相同行为。在括号平衡之前,images = Image.all;images.each do |im|; if im.imagestore_width.blank?;im.save;end;end irb不会执行。

console

答案 1 :(得分:1)

不知道irb / console出了什么问题,但你的ruby代码看起来好多了:

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

普遍的共识是使用{}而不是do / end来表示ruby中的单行块。