 <p>The two forms are equivalent.</p> <p>The recommended style is to use the braces for one line blocks and use the "do"-"end" for multiline blocks.</p> <p><strong>Edit:</strong> <a href="http://stackoverflow.com/users/36378/austin-ziegler/">Austin Ziegler</a> pointed out (in the comment below) that the two forms have difference precedence levels: Curly braces have higher precedence. Therefore, when calling a method without parenthesis a block enclosed in {} will bind to the last argument instead of the calling method. </p> <p>The following example was suggested by Austin:</p> <pre><code>def foo yield end puts foo { "hello" } puts foo do "hello" end </code></pre> <p>The first "puts" prints "hello": foo gets called returning "hello" which is the argument to puts.</p> <p>The second bails with an error:</p> <pre><code>in `foo': no block given </code></pre> <p>Since in this case the do-end block binds to the puts method.</p> <p>Thanks again to Austin for clearing this up.</p>