2005 年 4 月 18 日,星期一

Rails 0.12.0:预加载关联、新的 Base.find API、重温断言、更多 Ajax!

发布者:admin

是时候抛弃“ piggy-back query”并引入真正的关联加载(通过外连接)了。瞧,光荣的关联预加载让获取记录时,可以一次性轻松获取 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

为了配合预加载,我们引入了一个全新的统一 API for Base.find,无论您是搜索特定 id、第一条记录还是所有记录,它的工作方式都相同。通过使用命名选项,我们让您无需费力记住排序选项是第 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 应用程序能够很好地处理没有 Javascript 的不幸情况(使用 request.xml_http_request? 和 ajax 链接和表单的替代目标)变得更加容易。我们还添加了 periodically_call_remote,可用于每隔几秒 Ajax 更新一个给定的块。

在下一个版本中(不会很远),我们还将为类似 Google Suggest 的搜索框和上传进度指示器添加出色的支持。有一个强大的团队在推动这一领域的进步。我们还没有看到它的尽头。

总共 96 项更改、调整和修复
尽管如此,所有这些优点只是冰山一角。此版本中打包了总共 96 项新功能、更改、调整和修复。我们甚至没时间合并所有待处理的补丁。这是自上次发布以来三个月内一个内容丰富的版本,怎么样?

完全向后兼容!
尽管新功能、修复和优点层出不穷,但我们成功地使此版本与 0.11.1 完全向后兼容。因此,您只需运行“gem update rails”,即可在当前应用程序中使用所有新功能(要利用新的 JS 效果,您需要复制它——在您的应用程序目录中运行rails . 以免费获取它)。

请参阅变更日志了解完整故事