过去一周,随着核心团队为 RailsConf 上 Rails 3.0 Alpha 版发布做准备,Rails 边缘版一直处在调整升级中。本周我们在 GitHub 中看到大约 50 个对主分支的提交。以下是对最近更改的快速概览。
Rails 2.3.x 更改
在深入探讨主分支上的更改之前,有几项更改已提交到 2-3-stable 分支。如果你正在运行 2.3 边缘版,这些更改已为你准备就绪;它们也已移植到主分支。
:dependent => :delete
将起作用。set_table_name 'other_schema.customers'
提交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"
就能得到它们。请注意:实现和组织将随着我们确定提供核心扩展的最佳方式而发生变化。
其他边缘更改