2005 年 4 月 18 日星期一

Rails 0.12.0:急切关联、新的 Base.find API、断言调整,更多 Ajax!

发布者 admin

是时候让查询搭顺风车,引入通过外部联结进行的真实关联加载了。瞧,关联的急切加载让获取单个记录中数量少则 1、2 个多则无限个关联变得异常简单。让 50 个数据库查询变成 1 个从未如此简单。

# Turning N+1 queries into 1
for post in Post.find(:all, :include => [ :author, :comments ])
  puts "Post:            " + post.title
  puts "Written by:      " + post.author.name
  puts "Last comment on: " + post.comments.first.created_on
end

为了配合急切加载,我们引入了一个全新的Base.find 的统一 API,而无论你是要搜索特定 ID、第一个记录,还是所有记录,该 API 都能始终有效。通过使用命名选项,减轻你大脑的负担,使你不再需要记住排序选项是第 3 个还是第 4 个参数。

Person.find(1, :conditions =>"administrator = 1", :order =>"created_on DESC")
Person.find(1, 5, 6, :conditions =>"administrator = 1", :order =>"created_on DESC")
Person.find(:first, :order =>"created_on DESC", :offset => 5)
Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50)
Person.find(:all, :offset => 10, :limit => 10)

更好的测试
我们还大幅减少了控制器测试所需的断言数。一举之下,断言数从约三十个降到七个。其余的断言比以前更为灵活,也更容易记住,紧随其后的是一个很棒的新功能 assert_tag,通过该功能检查操作的HTML输出比昨天的XHTML/REXML摸索方式要容易得多。

更多 Ajax
当然,如果没有断言我们作为进行 Ajax 操作的首选框架的无争议地位,我们就无法进行新的发布。此版本包含大量平滑的新效果,用于可视化你的非刷新操作。现在,制作 Ajax 操作会变得容易得多,而且,奇怪的是,request.xml_http_request? 以及针对 Ajax 链接和表单的备用目标非常适合不使用 Javascript 的设备。我们还添加了 periodically_call_remote,该功能可用于每隔一段时间通过 Ajax 更新特定块。

在即将发布的下一个版本中,我们还将为 Google Suggest 类似的搜索框和上传进度指示符添加出色的支持。有一个强大的团队为推进这一领域的发展做出了贡献。我们还没有看到它的结尾。

总共 96 项更改、调整和修复
尽管如此,所有这些好东西都只是冰山一角。总共有 96 项新特性、更改、调整和修复打包进了这次庞大版本中。我们甚至还没有时间提交所有的未处理的补丁。自上次发布以来这三周的精彩表现怎么样?

完全向后兼容!
尽管有许多新功能、修复和好东西的冲击,我们仍然设法让此版本与 0.11.1 完全兼容。 因此,您只需执行“gem 更新 rails”,所有新内容即可在您的当前应用程序中使用(但要利用新的 JS 效果,您需要复制它 — 在您的应用目录中使用rails .来免费获取)。

查看变更日志了解完整故事