Yes, I found this annoying too.
I did a quick fix by replacing the contents of Sublime Text 2/Packages/Ruby/open-yield-block-({).sublime-snippet with:
<snippet>
<content><![CDATA[{${1/(^.+$)|^$/(?1: |)/}${1:variable}${1/(^.+$)|^$/(?1:|)/} $0 ]]></content>
<tabTrigger>{</tabTrigger>
<scope>source.ruby</scope>
<description>Insert { |variable| … }</description>
</snippet>
(You may wish to comment out the original contents and add the above, so you can easily revert it).
The original tag expression was attempting to take your context (writing ruby, inside a string or in a comment) into account, but as I tend not to hit {[tab] inside strings or comments I wasn’t so worried about those two scenarios. I haven’t had time to investigate how to fix it directly (and the regex is challenging), so what you see is adapted from the mechanism in the do-obj-…-end-(doo).sublime-snippet.
The result generates the expected { |variable| } and supports tabbing from the variable to writing an expression. It works for me, but hasn’t been widely tested.