当我在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
这些问题是否相关?我该如何修理它们?
答案 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中的单行块。