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)
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)
jsonのキーを仕様通りに
- json.orgには、キー値は文字列じゃないとダメと書いてある
- そしてダブルクォートでくくれと書いてある。
- なのでその通りにした。
2.2だとこう
{1=>2}.to_json
edgeだとこう
{1 => 2}.to_json
Object#tryを変更
Object#tryはこんなメソッド
def try(method)
send method if respond_to? method
end
そんなObject#tryのふるまいをちょっと変えた