3

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

这些问题有关系吗?我该如何修复它们?

4

2 回答 2

4

在行中:

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
于 2011-01-19T10:29:19.847 回答
1

不知道 irb/console 有什么问题,但您的 ruby​​ 代码看起来会更好:

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

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

于 2011-01-19T10:30:08.243 回答