2008 年 11 月 21 日,星期五

锋利的 Rails 本周动态

Mike Gunderloy 张贴

本周首先要警告那些未紧密关注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#secondArray#tenth 作为 Array#[1]Array#[9] 的别名。我并不想对此争议表态(我在 其他地方 表过态了),但我只想指出,最新的 edge checkin 在我撰写本文时会减少到只支持 Array#secondArray#fifth – 并且使用开销节省来实现 Array#forty-two提交