在过去的一周里,Edge Rails 正在进行大刀阔斧的改造,核心团队正在为 RailsConf 上的 Rails 3.0 alpha 版本做准备。本周我们在 GitHub 的 master 分支上看到了大约 50 次提交。以下是近期变化的快速概览。
Rails 2.3.x 变更
在深入研究 master 分支的变更之前,2-3-stable 分支上也有一些提交。如果您正在使用 2.3 edge,这些变更已经准备就绪;它们也已经被移植到 master 分支上了。
:dependent => :delete 能够正常工作。set_table_name 'other_schema.customers' 提交ActionView::Path 重构
Rails 3 本周的一个主要变更来自于对 Action Pack 的持续重构工作。这次的目标是 ActionView::Path。本次 提交 中的变更包括将 ActionView::Path 与 Action Controller 和 Action Mailer 解耦,这给我们带来了两个主要好处。首先,将相似的代码整合到一处,更容易理解和维护。其次,通过抽象这些代码并提供 API,我们将能够让其他组件参与到控制器层,而不仅仅是 mailers 和传统的控制器。
这里还有一些为未来做准备的工作。计划是将模板与文件系统解耦,并将本地化(localization)与 ActionView 解耦。敬请关注!
可插拔 JSON 后端
您可能还记得,Rails 最近增加了可插拔的 XML 支持。本周,得益于 Rick Olson 的工作,我们获得了 可插拔 JSON。这意味着您可以将默认的基于 YAML 的 JSON 支持替换为 JSON gem。
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" 即可拥有它们。注意:随着我们确定提供核心扩展的最佳方式,实现和组织将会有所变化。
其他 Edge 变更