Riding Rails: This Week in Edge Rails
上記の記事を意訳したのでメモ。
トランザクションをネスト
- トランザクションをネストできるように。
- ネストする時は:require_newオプションが必要。オプション指定がないと親のトランザクションの一部と見なされる。
- 内部ではsavepointsとかいうのを使ってるらしい
- このトランザクションはテスト中のfixtureで使われてる?らしい
User.transaction do User.create(:username => 'Admin') User.transaction(:requires_new => true) do User.create(:username => 'Regular') raise ActiveRecord::Rollback end end User.find(:all) # => Returns only Admin
MemacheStoreのエンハンス
MemCacheStore使用時のパフォーマンスを改善
callbackを仕様通りに直した
ActiveRecordのドキュメントに「ActiveRecordbefore_*系のcallbackがfalseを返したら、その後の全てのcallbackとそれに紐づいたアクションはキャンセルされる。」と書いてあるけど現行バージョンではそれは動作しなくなっている。もしbefore_updateやbefore_createをキャンセルしても、after_saveは動いてしまう。2.3ではドキュメント通りになっている。
TimeWithZoneで小数秒
- TimeクラスやTimeWithZoneクラスはxmlschemaメソッドを持つ。
- xmlschemaメソッドはXMLフレンドリーな文字列で時間を返すメソッド。
- 下記のように、xmlschemaメソッド引数で指定した値まで小数点以下を表示するようにした。
Time.zone.now.xmlschema(6) #=> "2009-01-18T14:12:56.935478Z"