2009 年 4 月 24 日星期五

本周 Rails 边缘版动态

作者 Mike Gunderloy

2009 年 4 月 18 日至 2009 年 4 月 24 日

过去一周,随着核心团队为 RailsConf 上 Rails 3.0 Alpha 版发布做准备,Rails 边缘版一直处在调整升级中。本周我们在 GitHub 中看到大约 50 个对主分支的提交。以下是对最近更改的快速概览。

Rails 2.3.x 更改

在深入探讨主分支上的更改之前,有几项更改已提交到 2-3-stable 分支。如果你正在运行 2.3 边缘版,这些更改已为你准备就绪;它们也已移植到主分支。

  • 已修复涉及哈希条件关联的一些 bug,特别是确保 :dependent => :delete 将起作用。
  • PostgreSQL Active Record 适配器现在,如果你在非默认架构中使用表,它将执行正确操作。你需要在模型类中设置表名称:set_table_name 'other_schema.customers' 提交
  • 同样在 PostgreSQL 适配器中,还修复了几个与大写字母名称引用错误相关的 bug。

ActionView::Path 重构

本周 Rails 3 中的一个主要更改部分源于持续重构 Action Pack 的工作。这一次,ActionView::Path 成为了目标。提交 中的更改包括从 Action Controller 和 Action Mailer 中分离出 ActionView::Path,这为我们带来了两大好处。首先,将类似的代码整合到一处,使其更易于理解和维护。其次,通过抽象出此类事物并提供 API,我们让其他组件(超越邮件程序和传统控制器)能够参与控制器层面。

在此,还有一些为未来设置的工作。计划是从文件系统分离模板,并从 ActionView 分离本地化。敬请期待!

可插拔 JSON 后端

你可能还记得,最近 Rails 已转向支持可插拔 XML。本周,借助 Rick Olson 的工作,我们拥有了 可插拔 JSON。这意味着你可以用 JSON gem 替换基于 YAML 的默认 JSON 支持


ActiveSupport::JSON.backend = "JSONGem"

作为此更改的一部分,Rails 现在在其需要 JSON 的任何位置都使用 ActiveSupport::JSON.encode()。这取代了使用 #to_json,而 Rails 团队也建议你这样做。如果你确实选择使用 #to_json,则需注意某些库可能会覆盖它。你可以使用此模式确保获取的是 Rails 自己的 #to_json 定义


gem 'json'
# JSON gem loaded, which overwrites to_json
ActiveSupport::JSON.backend = "JSONGem"

class ActiveRecord::Base
  # replace the gem's to_json with Rails' own to_json
  alias to_json rails_to_json
end

按需提供 Active Support

在 Rails 2.x 中,require "active_support" 一次拉入所有核心扩展。在 Rails 3 中,require "active_support" 仅使扩展可用;你必须显式要求那些你希望使用的扩展。本周的许多更改都涉及分解 Active Support,这样你可以仅根据需要获取内容即可。

最终结果是:很容易从 Active Support 中挑选功能,而不会觉得你邀请了一位身材结实的绅士搭便车。作为附加奖励,所有核心扩展文档现在都集中在一个地方:核心类。你无需到处搜索每个扩展模块即可找到方法。

在内部,核心扩展已得到重新组织,因此它们可以直接得到需要,而无需假定所有 Active Support 都可用。想要类似于 "car".pluralize 的变体吗?require "active_support/core_ext/string/inflections" 就能得到它们。请注意:实现和组织将随着我们确定提供核心扩展的最佳方式而发生变化。

其他边缘更改

  • Rails 扩展到 Pathname 的操作已删除,因为它只在代码的一个点中被使用。 提交记录
  • DRb 缓存存储的支持已被移除。 提交记录
  • sqlite Adapter 在支持微秒分辨率方面加入了 PostgreSQL 适配器。 提交记录