Question

When I run a multi-line statement in the Rails 3.0.1 console, pressing enter doesn't actually run the statement. Instead, it goes to a new console line, and the cursor has been tabbed to the right. Then I have to run a basic line (like p "hey"), and then the multi-line statement will run.

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"

I've been doing it like this for awhile and it's been working okay. But now I've got a problem in the console and it might be related. When I ran the above code, instead of it working like it normally does, it just went to a new console line with a ? added

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

When it does this, I can't exit the console

ruby-1.9.2-p0 ?>  exit
ruby-1.9.2-p0 ?>  ^C

Are these problems related? How can I fix them?

Was it helpful?

Solution

In the line:

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

You have an end to close the if but not an end to close the do block of the each.

This is why the console is redisplaying the prompt asking for more input before executing your statements.

Try:

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

Notice, you will see the same behaviour with brackets. irb or console won't execute until the brackets balance e.g.

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

OTHER TIPS

Dunno what's wrong with irb/console but your ruby code could look a lot nicer:

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

The general consensus is to use {} rather than do/end for single line blocks in ruby.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top