ActiveRecord::Base::transactionはrollbackされない。
データベース内の情報の整合性を保つためにtransactionを使うわけだ。
しかし、エラーが発生したら、rollbackされないと意味がない。
しかし、はまってしまう罠がある。
http://underrails.seesaa.net/article/54762314.html
returnを使うケースもそうだし、
begin ~ rescue ~ end使うケースもrollbackがされない。
明示的 raise を使って例外発生する必要がある。
http://www.fraction.jp/log/archives/2008/02/21/ActiveRecord_de_rollback