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ません。enddoeach

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

試す:

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

一般的なコンセンサスは、Ruby の単一行ブロックに対して do/end ではなく {} を使用することです。

于 2011-01-19T10:30:08.243 に答える