2008年11月21日,星期五

本周 Edge Rails 动态

发布者 Mike Gunderloy

本周首先要提醒那些没有密切关注Rails 仓库状态的人——“edge”现在真的意味着“前沿”了。2.2 版本即将锁定发布,仓库也已分叉;目前,edge Rails 被标识为2.3,尽管预计的版本号将来可能会改变。如果你想在你的机器上安装接近发布的 2.2 版本,请确保你使用的是 2-2-stable 分支,而不是 edge,后者目前正在进行一些重大更改。

2-2-stable 代码仍在进行更改,但这些更改要么是 bug 修复,要么是非常小的改动。本周的更改包括修复has_one :through 关联的赋值中的一个 bug、进一步优化CSRF 防护、修复布尔属性的复选框处理、更新 bundled 的 TZInfo、Prototype 和 script.aculo.us 的副本,以及一些 Ruby 1.9 兼容性工作(尽管目前完整的 Ruby 1.9 兼容性目标是 Rails 2.3)。

2.2 分支中最大的功能更改是为新生成的 Rails 项目添加了显式的 I18n 支持,包括一个示例 locale 文件、自动加载 config/locales 中的所有 locale,以及 config/environment.rb 中的示例设置。提交

在 2.2 版本中还值得注意的是移除了一些代码:Active Record 测试用例中删除了大量针对 SQL Server 适配器的特殊情况测试。这是因为 Ken Collins 在让 SQL Server 适配器按照 Rails 对数据适配器的期望方式工作方面做了大量出色的工作,这让我们在后端可移植性方面迈出了重要一步。提交

在实际的 edge 代码(仓库中的 master 分支)方面,动作更多。随着该分支刚刚开放,一些积压的代码已被提交,并且正在进行一些重大更改。这是一个激动人心的时刻,edge 绝对值得关注。以下是过去一周中一些最值得注意的更改。

Jeremy Kemper 带来了一系列重大更改,他一直在全面改进 Rails 的内部测试,将 Test::Unit::TestCase 切换为 ActiveSupport::TestCase。这项工作还包括要求使用 Mocha 来测试 Rails(在 2.2 代码中,如果没有安装 Mocha,一些测试将被跳过),并且总体上使 Rails 的测试策略(包括核心内部和生成应用程序)向前发展更加一致。

如果你一直是受 application.rb 的特殊命名困扰的人之一,那么请欢呼吧!在 edge 代码中,它已被重构为 application_controller.rb。更多信息在这里在这里提交

Rails 2.3 将引入默认作用域的概念:类似于命名作用域,但适用于类中的所有命名作用域或 find 方法。例如,你可以写 default_scope :order => 'name ASC',这样每次从该类检索记录时,它们都会按名称排序(当然,除非你覆盖此选项)。提交

许多人已经采纳了使用 try() 来尝试在对象上执行操作的观念——这是 Chris Wanstrath 的博客文章介绍了它。这在视图中特别有用,你可以通过编写类似 <%= @person.try(:name) %> 的代码来避免 nil 检查。现在,它已经被直接集成到 Rails 中了。提交

在语法糖方面,还有一个新的 Enumerable#none? 方法,用于检查没有元素匹配提供的块。提交

render 方法多年来一直在变得更智能,在 2.3 版本中它将变得更加智能。如果你有一个对象或一个集合,并且命名匹配,你现在只需要执行 <% render @article %><% render @articles %>,事情就会顺利进行。Ryan Daigle 在这方面提供了一些示例提交

在相似的方面,render_component 将从 2.3 版本中的“已弃用”变为“不存在”。如果你仍然需要它,可以安装插件提交

autolink 助手已被重构,使其更加简洁和直观。提交 提交

已修复与线程安全和 asset 标签相关的内存泄漏问题,这可能会影响引用大量外部图片的网站。Aaron Batalion 贡献了此修复,并发表了一篇博客文章解释了这个问题。提交提交

最后,值得一提的是,关于 5 个月前在 2.2 代码中进行的一项更改——添加了 Array#secondArray#tenth 作为 Array#[1]Array#[9] 的别名——已经引起了一些争议。五个月前——我目前正在编写本文时,最新的 edge 提交将此限制为仅支持 Array#secondArray#fifth——并利用节省的开销实现了 Array#forty-two提交