2009 年 8 月 13 日,星期四

Edge Rails 的最新动态:BugMash 版

作者 Nathaniel Bibler

又过了一周,是时候再来了解一下 Edge Rails 的更新了。伙计们,你们这样让我很为难啊,不是吗?据我所知,这个周末是第一次 Rails 和 RailsBridge BugMash。按照我的统计,过去六天内 Rails master 大约有 300 次提交,其中大部分是在周末完成的。真是火热的考验啊!这里有很多真的很不错的东西,让我们开始吧

我唯一想要的是小验证

ActiveRecord(或者更确切地说是 ActiveModel)在周末加了很多验证功能。

  • 感谢 James Hill,您现在可以让您的验证方法 从自定义方法中读取。这将使您能够更轻松地验证非列(实例变量)数据(例如)。
  • Adam Keys 在 validates_length_of 中添加了对 排除范围 的支持。所以,validates_length_of :name, :within => (5...10) 实际上会将有效长度限制在 5 和 9 之间。
  • 感谢 Zac Williams,validates_length_of :name, :maximum => 10 现在将 默认允许 nil 进行验证。
  • 如果你不能 validates_format_of :without => /.../validates_format_of 有什么用呢?好吧,让我告诉你们,用处不大…Elliot Winkler 提供了一个补丁,专门解决这个问题。
  • 最后,但肯定不是最不重要的一点,Jeff Dean 提交了一个很棒的补丁,现在它给我们带来了:validates_with。这个小奇迹现在允许您将验证代码放到一个外部类中。而这,我的朋友们,代表着对职责的更好封装,我敢保证它可以提高可读性,甚至可以在您的应用程序中共享验证逻辑,甚至可以在各个 gem 中共享验证逻辑。干得好,Jeff。

我们有了更多资源

周末对 ActiveResource 进行了许多更新。而且,我确信你们许多人会对其中的一些更新心存感激

  • 多亏了 Marshall Huss,ActiveResource 现在 支持 HTTP 代理。这在大型企业和其他防火墙或隔离环境中非常有用。
  • Roy Nicholson 为 ActiveResource 获取了 SSL 选项。这允许您使用 X509 证书、SSL 超时、对等验证等。
  • ActiveResource.exists? 经过 Jatinder Singh 的优化。当然,这种优化意味着现在它真正起作用了。不会再引发 Net::HTTP 错误。
  • Fabien Jakimowicz 添加了 JSON 错误报告 支持。因此,现在无论您使用 XML 还是 JSON,系统都将正确向您报告错误。

团结就是力量

多亏了 Dan Cheail,我们终于获得了 grouped_collection_select 帮助器。我的意思是说,没有谁能否认他们无法喜欢这一功能

class Continent < ActiveRecord::Base
class Country < ActiveRecord::Base
class City < ActiveRecord::Base

<%= grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name) %>

<select name="city[country_id]">
  <optgroup label="Africa">
    <option value="1">South Africa</option>
<option value="3">Somalia</option>
  </optgroup>
<optgroup label="Europe">
<option value="7" selected="selected">Denmark</option>
    <option value="2">Ireland</option>
</optgroup>
</select>

我的 Routes 非常庞大

本周末,Mike Breen 为 rake routes 带来了一个小巧却极其实用的补丁。现在,您可以通过传入 CONTROLLER=foo 来过滤所列结果。那简直太棒了。就我个人而言,我手指已经习惯每当我键入 rake routes 时都会自动追加 “| grep foo” 这个部分。显然,这已经成为我的肌肉记忆了。*sigh*

简洁明了

我将仅在此处提几项值得注意的提交来结束 BugMash 部分。当然,BugMash 并不局限于此,我还可以用更多压扁的 bug 和功能再写一篇文章,但它必须在某个地方结束,对吧?

  • Rizwan Reza 添加了对您定义 自定义 RedCloth 选项 的支持,该定义通过 textilize 帮助器进行。因此,现在 textilize("Testing <b>HTML</b>", :filter_html) 实际上将过滤 HTML!
  • 您现在可以 redirect_to(User) - 请注意,此处 User 是一个类,而不是实例 - 作为 redirect_to(users_url) 的同义词。感谢 Niklas Holmgren 提供此功能。
  • 多亏了 Eric Davis,发送的邮件项目现在已经具备了 保存到磁盘 的功能。使用新的 :file 交付方法时,您甚至可以为目录存储定义您自定的 :location
  • 最后,它不一定是与 BugMash 相关,但 José Valim 添加了 model.destroyed?。仅当您当前查看的实例已被成功销毁时,这个不错的方法才会返回 true

解决了这些问题之后,以下是一些与 BugMash 无关的话题

访问 Oracle

了解道路与走上道路之间是不同的。本周对 Rails 进行了一些更新,主要集中在测试,并添加了 改进的 Oracle 数据库支持。很大一部分工作似乎来自一个人,Raimonds Simanovskis。我知道在 Rails 中讨论数据库时,主要有四大数据库 - SQLite、MySQL、PostgreSQL 还有另一款不方便提及的数据库 - 所以很好,我们把一些精力放在这个房间里 800 磅重的怪物身上也无妨。

此更新修复了由于偏移和限制导致的测试用例失败、空字符串存储为 null、来自 ActiveRecord.sum 的数字结果、Oracle 在连接上没有使用 “AS” 关键字以及其他很多问题。

AbstractController::Responder

José Valim 和 Yehuda Katz(当然还有许多其他人)付出了极大的努力重新设计 Rails 渲染器。事实上,大多数渲染代码现在都存放在一个通用对象 AbstractController::Responder 中。当然,这可能不是它们最终安息的地方,但有趣的是,一旦许多渲染逻辑集合在一起,核心团队就能快速识别和设计逻辑,以实现显着的速度提升。有一次,Yehuda 甚至提到一个经过测试的基准显示,比 Rails 2.3“部分渲染速度提高 10%”。

我知道在 RailsEnvy 播客中我抱怨花了这么长时间才能看到 Rails 3.0 的发布,但请注意,这帮家伙正在做一些非常棒的工作。我看到了广泛的测试和基准,以及一些非常智能的重构。我们真的有一些更好的东西推出。

我相信我本周漏掉了几个重要和/或有趣的提交。所以,如果其中一个是你做的,我深表歉意。我与社区中的其他成员当然感谢你花这个周末做的努力,Rails 肯定因此变得更好。所以,要向所有的 BugMasher 表示感谢,感谢,再感谢。并且,如果你错过了参加这轮比赛的机会,我们当然欢迎你参加下一轮。

如果你希望获得更简短的此内容的音频摘要,你应当看看 Envy Labs 新推出的播客 - Ruby5;一个 5 分钟时长的播客,每两周发布一次,涵盖 Ruby 和 Ruby on Rails 新闻。

照片:布鲁克林大桥虚拟之旅,作者 Diego_3336