2011-01-19 13 views
3

Rails 3.0.1コンソールで複数行の文を実行するときに、Enterキーを押しても実際には文が実行されません。代わりに、新しいコンソール行に移動し、カーソルが右側にタブで表示されます。次に、私は基本的な行(p "hey"のような)を実行しなければならないし、複数行のステートメントが実行されます。Strange 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 ?> exit 
ruby-1.9.2-p0 ?> ^C 

を終了することはできませんない場合

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 ?> 

を追加しましたか?どうすれば修正できますか?ラインで

+0

スクリプトを実行し、ランナーとともに起動します。 – shingara

答えて

4

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

あなたはeachdoブロックを閉鎖するifではなくendを閉鎖するendを持っています。

これは、コンソールがステートメントを実行する前に、入力を求めるプロンプトを再表示する理由です。

試してみてください。

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 
1

IRB /コンソールで間違っているのですが、あなたのRubyコードをたくさんよりよい見えることができるもの知らん:

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

一般的なコンセンサスは、{使用}ではなくRubyで単一ラインブロックのために/終了を行うことです。