
又一周,又一次 Edge Rails 的更新。我的天,你可真不让我省心,是吧?这个周末,如果你还没听说过,那就是首次 Rails 和 RailsBridge BugMash。如果我的计算没错,过去六天里,Rails master 大约有 300 次提交,其中大部分是在周末完成的。这简直是严峻的考验!这里有很多真正的好东西,让我们开始吧。
ActiveRecord(或者更准确地说,ActiveModel)在这个周末得到了很多关于验证的优化。
validates_length_of 中添加了对排他范围的支持。所以,validates_length_of :name, :within => (5...10) 实际上会将有效长度限制在 5 到 9 之间。validates_length_of :name, :maximum => 10 现在默认会允许 nil 值通过验证。validates_format_of :without => /.../,那么 validates_format_of 有什么用呢?嗯,作用不大,我告诉你… Elliot Winkler 提供了一个补丁来解决这个问题。validates_with。这个小巧的改进现在允许你将验证代码放入外部类中。我的朋友们,这意味着更好的职责封装,我敢打赌,可读性会更好,甚至可以在你的应用程序或 gem 中共享验证逻辑。干得好,Jeff。ActiveResource 在这个周末收到了不少更新。而且,我相信很多人会为其中的一些更新感到庆幸。
ActiveResource.exists? 进行了一些优化。所谓的优化,我确实是说它现在能正常工作了。而不是抛出 Net::HTTP 错误。感谢 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>
这个周末,Mike Breen 为 rake routes 提交了一个小的但非常有用的补丁。现在你可以通过传递 CONTROLLER=foo 来过滤列出的结果。这。就是。太棒了。我个人已经到了手指会自动地在输入 rake routes 时追加“| grep foo”的部分的程度了……显然我有极客肌肉记忆。*叹气*
我将在这里结束 BugMash 部分,只提几个值得一提的提交。当然,这并不是 BugMash 的全部,我可能可以再写一篇同样长的文章来介绍更多修复的 bug 和新增的功能,但总得有个结束,对吧?
textilize 辅助方法可以定义自定义 RedCloth 选项。所以,现在 textilize("Testing <b>HTML</b>", :filter_html) 实际上会过滤 HTML!redirect_to(User) - 请注意,这里 User 是一个类而不是一个实例 - 作为 redirect_to(users_url) 的同义词。感谢 Niklas Holmgren 实现此功能。:file 传递方法时,你甚至可以定义自己的自定义 :location 来进行目录存储。model.destroyed?。这个巧妙的方法只有在你当前查看的实例已成功销毁时才会返回 true。现在我们处理完了这些,这里有几个与 BugMash 无关但已得到解决的话题。
知道路和走在路上是有区别的。本周,Rails 在这方面有一些更新,主要围绕着测试,增加了改进的 Oracle 数据库支持。这项工作很大一部分似乎来自一个人,Raimonds Simanovskis。我知道当我们谈论 Rails 的数据库时,总是会想到四大 - SQLite、MySQL、PostgreSQL,以及那个不愿提及的另一个 - 所以很高兴能更多地关注到房间里那只 800 磅重的大猩猩。
这次更新修复了由于偏移量和限制导致的测试用例失败、空字符串存储为 null、ActiveRecord.sum 的数字结果、Oracle 在连接时未使用的 'AS' 关键字,以及许多其他问题。
José Valim 和 Yehuda Katz(以及许多其他人,我敢肯定)在重构 Rails 渲染器方面做了出色的工作。事实上,大部分渲染代码找到了一个共同的对象——AbstractController::Responder。当然,这可能不是它最终的归宿,但值得注意的是,一旦将很多渲染逻辑整合在一起,核心团队就能够快速识别和重构逻辑,看到显著的速度提升。曾几何时,Yehuda 甚至提到一项经过测试的基准显示,“部分渲染速度比 Rails 2.3 快 10%”。
我知道在 RailsEnvy 播客中,我曾嘲笑 Rails 3.0 发布所需的时间,但重要的是要注意,这些人正在做一些非常棒的工作。我看到了大量的测试和基准测试以及非常智能的重构。我们确实还有很多美好的事物即将到来。
我敢肯定我遗漏了本周几项重要和/或有趣的提交。所以,如果其中一项是你的,我先表示歉意。我和社区的其他成员非常感谢你们这个周末付出的努力,Rails 因此变得更好了。所以,非常感谢,非常感谢,非常感谢所有参与 BugMash 的朋友们。而且,如果你错过了这一轮的提交,我们当然欢迎你参加下一轮。
如果你更喜欢简短的音频摘要,你应该看看 Envy Labs 新推出的播客 Ruby5;这是一个每周两次、时长 5 分钟的播客,涵盖 Ruby 和 Ruby on Rails 新闻。
照片:Diego_3336 的布鲁克林大桥虚拟之旅