奇妙なRailsコンソールの動作
-
12-10-2019 - |
質問
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のシングルラインブロックを実行/終了するのではなく、{}を使用することです。
所属していません StackOverflow