2016 年 8 月 20 日,星期六

本周 Rails:阅读我来学习一个炫酷的技巧™!

由 chancancode 发布

我是 Godfrey,来自俄勒冈州波特兰。本周有很多内容要介绍,让我们直接进入正题,这样你就可以回去看奥运会了!

👀
👅

炫酷的技巧™

路由可视化工具

你是否曾想过,当你在 Rails 应用中访问一个 URL(比如 /posts/5)时会发生什么?Rails 路由是如何知道将用户发送到何处的?

第一步(也是众多步骤中的一步)是将 URL 与路由表进行比较以查找匹配项。为了使此查找尽可能快,路由表会预先编译成一个有限状态机,具体来说是非确定性有限自动机 (NFA)

如果这听起来很吓人,别担心!Rails 路由实际上附带了一个调试工具,可以生成一个交互式可视化的路由 NFA。

要为你的应用生成一个,只需在 Rails 控制台中运行 Rails.application.routes.router.visualizer,然后将返回的字符串保存到 html 文件中。(你需要 dot 命令行工具——macOS 用户可以通过 brew 安装:brew install graphviz。)

哦,它不起作用?我忘了说这个工具在 Rails 5 中因为内部重构而损坏了。不过别担心,Seth 在这个 pull request 中为我们修复了它,它将在下一个 5.0 补丁版本中发布。如果你等不及,可以尝试运行 5-0-stable 分支。

在你用这个很棒的工具构建下一个价值十亿美元的初创公司之前,请注意,这是一个未记录的(私有的!)API,正如你所见,它可能会在不同版本之间意外中断(或完全消失)。

虽然它绝对不是生产级的™软件,但对于学习和调试目的仍然非常有用。尽情享受它吧!

新功能

可选的 schema.rb 对齐

转储 schema 时,Rails 会尝试垂直对齐以提高可读性。但是,当更改现有表时,这可能会导致比你想要的更大的 diff。通过这个 PR,你现在可以选择关闭它!

Controller Tests 现在支持 as 选项

虽然集成测试在未来受到强烈推荐而不是控制器测试,但这个 PR 允许你在控制器测试中使用相同的 as: :json(或 as: :xml 等)选项来模拟请求内容类型。 

retry_on 获得工作

Active Job 的 retry_on API 除了异常对象之外,现在还可以访问失败的 job 实例。

使 touch_later 尊重 no_touching

正如你所期望的,no_touching API 现在可以与 touch_later 正确组合。

使用数组和范围进行查询

通过这个 PR,当你查询数组/范围列时,你可以将 Array 或 Range 对象传递给 where(some_column: …),前提是你的数据库支持这些列类型。

修复升级任务文档

这是一个定期的公告,关于升级 Rails 应用,update task 将是你的好帮手。在 Rails 5 中,这个命令已被重命名为 rails app:update,而在升级到 Rails 4.2 及更低版本时,你应该使用 rake rails:update

有关更多详细信息,请参阅升级指南

如果你错过了…

Active Job 默认使用 Async Adapter

如果你错过了,Rails 5 中的 Active Job 默认使用“async”适配器进行 job 处理(之前的默认是“inline”适配器)。文档已更新以反映这一变化。

总结

这就是本周 Rails 的内容!一如既往,有很多我们无法一一介绍的更改。如果你有兴趣,一定要自己去查看

下周再见!