题
当我在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"
我一直这样做了一段时间,而且工作还不错。但是现在我在控制台上遇到了问题,可能是相关的。当我运行上述代码时,它并没有像往常一样工作,而只是使用A的新控制台行?添加
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
其他提示
dunno IRB/控制台有什么问题,但是您的Ruby代码看起来更好:
images = Image.all.each { |im| im.save if im.imagestore_width.blank? }
一般共识是使用{}而不是Ruby中的单行块DO/End。
不隶属于 StackOverflow