One thing I love about ruby is that mostly it is a very readable language (which is great for self-documenting code)
However, inspired by this question: Ruby Code ex
Some more idioms:
Use of the %w, %r and %( delimiters
%w{ An array of strings %}
%r{ ^http:// }
%{ I don't care if the string has 'single' or "double" strings }
Type comparison in case statements
def something(x)
  case x
    when Array
      # Do something with array
    when String
      # Do something with string
    else
      # You should really teach your objects how to 'quack', don't you?
  end
end
... and overall abuse of the === method in case statements
case x
  when 'something concrete' then ...
  when SomeClass then ...
  when /matches this/ then ...
  when (10...20) then ...
  when some_condition >= some_value then ...
  else ...
end
Something that should look natural to Rubyists, but maybe not so to people coming from other languages: the use of each in favor of for .. in
some_iterable_object.each{|item| ... }
In Ruby 1.9+, Rails, or by patching the Symbol#to_proc method, this is becoming an increasingly popular idiom:
strings.map(&:upcase)
Conditional method/constant definition
SOME_CONSTANT = "value" unless defined?(SOME_CONSTANT)
Query methods and destructive (bang) methods
def is_awesome?
  # Return some state of the object, usually a boolean
end
def make_awesome!
  # Modify the state of the object
end
Implicit splat parameters
[[1, 2], [3, 4], [5, 6]].each{ |first, second| puts "(#{first}, #{second})" }
I always forget the exact syntax of this shorthand if else statement (and the name of the operator. comments anyone?) I think it's widely used outside of ruby, but in case someone else wants the syntax here it is:
refactor < 3 ? puts("No need to refactor YET") : puts("You need to refactor this into a  method")
expands to
if refactor < 3
  puts("No need to refactor YET")
else
  puts("You need to refactor this into a  method")
end
update
called the ternary operator:
return myvar ? myvar.size : 0
Here's a few, culled from various sources:
use "unless" and "until" instead of "if not" and "while not". Try not to use "unless" when an "else" condition exists, though.
Remember you can assign multiple variables at once:
a,b,c = 1,2,3
and even swap variable without a temp:
a,b = b,a
Use trailing conditionals where appropriate, e.g.
do_something_interesting unless want_to_be_bored?
Be aware of a commonly-used but not instantly obvious (to me at least) way of defining class methods:
class Animal
  class<<self
    def class_method
      puts "call me using Animal.class_method"
    end
  end
end
Some references:
a = (b && b.attribute) || "default"
is roughly:
if ( ! b.nil? && ! b == false) && ( ! b.attribute.nil? && ! b.attribute.false) a = b
else a = "default"
I use this when b is a record which may or may not have been found, and I need to get one of its attributes.
Array.pack and String.unpack for working with binary files:
# extracts four binary sint32s to four Integers in an Array
data.unpack("iiii") 
This slideshow is quite complete on the main Ruby idioms, as in:
Swap two values:
x, y = y, x
Parameters that, if not specified, take on some default value
def somemethod(x, y=nil)
Batches up extraneous parameters into an array
def substitute(re, str, *rest)
And so on...