2011-01-19 85 views
3

當我在Rails 3.0.1控制檯中運行多行語句時,按下Enter鍵實際上並不運行該語句。相反,它會轉到新的控制檯行,並且光標已被標記在右側。然後我必須運行一條基本線(如p "hey"),然後多行語句將運行。奇怪的Rails控制檯行爲

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

做一個腳本,並與你的跑步者啓動它。 – shingara 2011-01-19 10:22:01

回答

4

在行:

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

你有一個end關閉if但不是一個end關閉eachdo塊。

這就是爲什麼控制檯在執行語句之前重新顯示提示以詢問更多輸入的原因。

嘗試:

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

注意,你會看到用方括號括相同的行爲。 irbconsole將不會執行,直到括號平衡爲止。

irb(main):010:0> (3 * 
irb(main):011:1* (2 + 1) 
irb(main):012:1>) 
=> 9 
1

說不上有什麼不對IRB /控制檯,但你的Ruby代碼可能看起來要好很多:

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

普遍的共識是使用{}而不是在紅寶石單行塊做/結束。