本周 edge Rails 提交了 24 次(其中一个补丁也被移植到了 2.2 分支)。如果你想提前体验 Rails 2.3,现在安装一个 edge 版本是个不错的选择,如果你还没用的话。它对测试站点来说足够稳定,尽管还有一些粗糙的补丁。
几个人贡献了一个大的补丁,为 Active Record 提供了嵌套事务,这是一个备受期待的功能。现在你可以这样写代码了
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
嵌套事务允许你在不影响外部事务状态的情况下回滚内部事务。如果你想让一个事务嵌套,你必须明确添加 :requires_new 选项;否则,嵌套事务将简单地成为父事务的一部分(正如它在 Rails 2.2 中那样)。在底层,嵌套事务 使用保存点,因此即使在不支持真正嵌套事务的数据库上也能得到支持。还有一些魔法使其能够与测试中的事务性夹具良好配合。 提交
Nahum Wild 贡献了一些工作(受他的 spandex_mem_cache_store 插件启发),提高了 Rails 在使用 MemCacheStore 时的性能。基本思想是为发送到 MemCacheStore 的请求维护一个每个请求的本地缓存,减少不必要的读取,从而提高站点性能。 提交
你可能还记得 Active Record 文档中的一句话:“如果一个 before_* 回调返回 false,所有后续的回调和关联的操作都会被取消。”你可能不知道的是,这在当前版本的 Rails 中实际上是 损坏的:如果你取消了一个 before_update 或 before_create 回调,after_save 回调仍然会运行。在 Rails 2.3 中,这将按照文档所述那样工作。 提交
Time 和 TimeWithZone 类包含一个 xmlschema 方法,用于以 XML 友好的字符串格式返回时间。从本周开始,TimeWithZone 支持与 Time 相同的参数,用于指定返回字符串中小数秒部分的位数。
>> Time.zone.now.xmlschema(6)
=> "2009-01-16T13:00:06.13653Z"
如果你查阅 "json.org" 网站上的规范,你会发现 "JSON" 结构中的所有键都必须是字符串,并且必须用双引号引用。从本周开始,Rails 会正确处理这个问题,即使是数字键。 提交
Josh Peek 花了一些时间重构 Action Pack 中的各种测试,包括 查询字符串解析、JSON 参数解析、XML 参数解析、多部分参数解析和 URL 编码参数解析的测试。虽然这项工作不会带来新功能,但它值得关注,因为这些通常不被看重的清理工作对于保持 Rails 代码的良好状态至关重要。
在 讨论之后,Object#try 的语义发生了一些轻微变化:它现在会在私有方法上引发 NoMethodError,并且如果对象为 nil,则始终返回 nil。 提交