2017年1月13日,星期五

本周Rails:Time、Duration 修复等

由 vipulnsward 发布

新年快乐(又一次)!还有一个13号星期五 👻

我是Vipul,为您带来今年第二周的最新消息,这一周看起来会非常忙碌

感谢所有27位贡献者,特别是首次贡献的4位朋友。继续保持良好工作!

以下是本周Rails master上最相关的改动。

改进

自Ruby 2.5起,常量查找不再回退到顶层常量

由于Ruby 2.5中已移除顶层常量查找,Rails已在其端处理了相关改动,以便我们依赖于正确作用域的常量,而不是依赖于回退查找。

修复

修复 pool_from_any_process 以使用最新的规范

如果一个进程被forked多次,Active Record连接池会获取该进程最旧的连接规范,而不是最新的一个。

单个进程不会出现此问题,但如果您多次fork进程,将会返回错误的规范并使用不正确的连接。

此改动通过反转规范名称列表来解决此问题,以便我们能获取最新的规范而不是最旧的。

使时间旅行功能适用于Time/Date/Datetime的子类

之前在使用时间旅行方法(如travel_to等)时,对例如Time的子类调用now,会返回一个Time实例,而不是子类的实例。

此改动修复了我们返回实例的方式,确保我们始终使用正确的类返回。

修复包含月份和年份的Duration解析不一致的问题

之前,以下代码可能会根据当前时间成功或失败。

ActiveSupport::Duration.parse(2.months.iso8601) == 2.months  
ActiveSupport::Duration.parse(3.years.iso8601) == 3.years

此改动修复了不一致的解析,使此比较不再失败。

已移除

弃用reflection的class_name选项以接受类

reflection的class_name选项的目的是通过传递字符串来允许我们延迟加载类。

直接使用类,例如

belongs_to :client, class_name: Customer

会不必要地急切加载模型,并可能产生循环依赖。

此选项现已弃用,请改为传递类名的字符串。

总结

以上是Vipul的报道。希望您喜欢本期内容。 

如果您还没有开始,请着手准备RailsConf的提案,您只剩下6天时间来提交一个好的演讲