2019年1月28日,星期一

Active Record 错误修复、更快的 Date#advance 以及更多!

发布者:eugeneius

大家好!我是Eugene,为大家带来上周合并到 Rails 中的一些有趣的改进。

编辑凭据时不要加载应用环境

Rails 6.0 将支持每个环境的凭据,但添加新环境并非总是易事:如果您的应用程序在启动时访问凭据,credentials:edit 命令将无法运行,从而导致您无法添加缺失的凭据。糟糕!

即使包含大数字,所有查询也应返回正确的结果

启用预处理语句后,用超出范围的值查询整数列会在底层数据库驱动程序中引发错误。为了解决这个问题,Active Record 过去会拒绝运行查询并始终返回一个负面结果,例如ActiveRecord::RecordNotFound

这种方法适用于简单查询,但对于更复杂的查询会产生错误的结果。现在,超出范围的值将被转换为“不可能”的谓词(例如 WHERE 1=0),这使得查询可以在不引发错误的情况下运行,同时仍能产生正确的结果。

说到大数字:这个 18 个月前提交的 pull request 是 Rails 仓库中的第 30,000 个。🎈

在转换多参数时间哈希时修复年份值

数据库中 TIME 列中存储的值被映射到 Ruby 中的 Time 对象。后者包含日期部分,而前者不包含;为了处理这种差异,始终会分配一个默认日期,即 2000 年 1 月 1 日。

当一个多参数时间值(由 time_select 助手生成)赋给一个属性时,它的年份会被设置为 1970 年,从而产生不同的结果,具体取决于值的来源。

有了这个修复,时间属性就完全进入了 21 世纪。🖖

更快、更省内存的 Date#advance

此方法不必要地复制了其选项哈希。现在它不再这样做,因此更快、内存占用更少。

自上一期以来,有28 位贡献者为 Rails 贡献了代码;您可以在此处查看完整的更改列表

下周再见!