質問

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

これらの問題は関連していますか?どうすれば修正できますか?

役に立ちましたか?

解決

行:

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/コンソールの何が問題なのですが、ルビーコードはずっと良く見えるかもしれません:

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

一般的なコンセンサスは、Rubyのシングルラインブロックを実行/終了するのではなく、{}を使用することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top