本周首先要警告那些未紧密关注Rails 代码库状态的人们——“锋利”现在真正意味着锋利。2.2 的位已被锁定以进行发布,并且代码库已分叉;目前,锋利的 Rails 已被识别为2.3,尽管预计的版本号以后可能会更改。如果你正在尝试在你的机器上安装接近发布的 2.2 位,确保你使用的是 2-2-stable 分支,而不是锋利的,目前锋利的正在经历一些重大更改。
2-2-stable 代码仍会经历更改,但它们要么是错误修正,要么是极小的事情。本周,这包括修复分配给 has_one :through 关联中的错误,进一步调整CSRF 防护,修复对布尔属性的复选框进行的处理,更新捆绑的 TZInfo、Prototype 和 script.aculo.us 副本,以及一些 Ruby 1.9 兼容性工作(尽管目前全面 Ruby 1.9 兼容性针对 Rails 2.3)。
2.2 分支中最大的特性更改是对新生成 Rails 项目的明确 I18n 支持的添加,其中包括一个示例区域设置文件,自动加载 config/locales 中所有区域设置和 config/environment.rb 中的示例设置。 提交
值得在 2.2 中注意的是一部分代码移除:已从 Active Record 测试用例中切除了一堆针对SQLServer 适配器的特殊案例测试。那是因为 Ken Collins 在让SQL Server 适配器以 Rails 预期的方式运行方面做了大量工作,让数据适配器工作,在后端可移植性领域为我们跨出了一大步。 提交
在实际的锋利代码(代码库中的主分支)上,有更多的动作。随着该分支刚刚开放,一些积压的代码已签入,并且正在进行一些重大更改。这是一个激动人心的时刻,锋利绝对值得查看。以下是过去一周的一些最显著的更改。
一大套变更来自 Jeremy Kemper,他正在修改内部 Rails 测试以从 Test::Unit::TestCase
转为 ActiveSupport::TestCase
。这项工作还包括要求 Mocha 来测试 Rails(在 2.2 代码中,如果你未安装 Mocha,某些测试会被跳过),并且一般地让 Rails 测试策略(核心内和生成应用程序中的)变得更一致。
如果你一直觉得 application.rb 的特殊情况命名很烦人,那么恭喜你!它已被重新置为 edge 代码中的 application_controller.rb。更多信息 在此 和 在此 。 提交
Rails 2.3 将引入 默认范围 的概念:类似于已命名的范围,但适用于类中的所有已命名的范围或查找方法。例如,你可以写 default_scope :order => 'name ASC'
,并且任何时候从该类中检索记录,按名字排序(当然,除非你重写选项)。 提交
大量用户采用了使用 try() 在对象上尝试操作的概念——这是 Chris Wanstrath 的 博客文章,介绍了它。特别是在视图中,它很有帮助,你可以在其中通过编写类似于 <%= @person.try(:name) %>
的代码来避免空检查。好吧,现在它已经直接构建到了 Rails 中。 提交
还有在语法甜点方面的新增内容,Enumerable#none?
用来检查没有任何元素与提供的块匹配。 提交
这些年来 render 方法变得越来越智能,在 2.3 中它会变得更加智能。如果 a 有某个对象或集合并且命名相匹配,你现在可以执行 <% render @article %>
或 <% render @articles %>
,事情会照常运行。Ryan Daigle 有更多 示例。 提交
在一些类似的注释中,render_component 在 2.3 中从“已弃用”变成“不存在”。如果你仍需要它,可以安装 插件 。 提交
autolink
帮助程序已重构为让它变得不太混乱、更直观。 提交 提交
针对与线程安全性以及资产标记相关的修复已完成,该错误会影响引用大量外部图片的网站。Aaron Batalion 提供了修复方案,还有一个 博文 介绍了该问题。 提交 和 提交
最后,值得一提的是,2.2 代码更改引起了争议 五个月前 – 添加了 Array#second
到 Array#tenth
作为 Array#[1]
到 Array#[9]
的别名。我并不想对此争议表态(我在 其他地方 表过态了),但我只想指出,最新的 edge checkin 在我撰写本文时会减少到只支持 Array#second
到 Array#fifth
– 并且使用开销节省来实现 Array#forty-two
。 提交