Rails Rails 6.1 正式发布了~!

apexy · 2020年12月10日 · 最后由 yangfuyang 回复于 2021年03月23日 · 6281 次阅读

新特性:

  • Horizontal Sharding,
  • Multi-DB Improvements,
  • Strict Loading,
  • Destroy Associations in Background,
  • Error Objects,
  • and more!

https://weblog.rubyonrails.org/2020/12/9/Rails-6-1-0-release/

升级 6.1 可能最大的难点将是 Autoload mode 的变更,现在 zeitwerk 为默认的。如果你之前的项目的文件组织方式没有 Follow Rails 的约定,将会有困难。

准备升级

Horizontal Sharding 这个特性谁能分享一下是啥东西

huacnlee 回复

config.autoload = :classic 是指这个? 感觉还好吧,没有单个文件单个 class / module 习惯的同学可能要被自己坑咯。

Rails 6.1 form_with 的默认行为变成 local 了,remote form 需要指定 local: false。 https://twitter.com/chloerei/status/1338048528006844417

感觉这个有点坑。

6.1 的更新日志真的长,active storage 更好用了

rails 6.1.1 已发布

huacnlee 回复

Rails 6.1 Activerecord 更新

https://github.com/rails/rails/blob/6-1-stable/activerecord/CHANGELOG.md

  • Named scope chain does no longer leak scope to class level querying methods.

    class User < ActiveRecord::Base
    scope :david, -> { User.where(name: "David") }
    end
    

    Before:

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'John' AND name = 'David'
    

    After:

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'David'
    
  • where.not now generates NAND predicates instead of NOR. Before:

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
    

    After:

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE NOT (name == 'Jon' AND role == 'admin')
    

以上两点,我看了一下 ruby-china 没有改相关的代码,怎么做到兼容的呢?

fage108 回复

没有这类使用场景

下面这一段没有完全看明白,如果这样的话, User.where(name: "John").david 的效果不是和 User.david 一样了吗?


Named scope chain does no longer leak scope to class level querying methods.

lass User < ActiveRecord::Base
scope :david, -> { User.where(name: "David") }
end

Before:

User.where(name: "John").david
# SELECT * FROM users WHERE name = 'John' AND name = 'David'

After:

User.where(name: "John").david
# SELECT * FROM users WHERE name = 'David'
48hour 回复

原来那样同一个 name 字段二次过滤条件,明显是错误的逻辑,没人会这么查,因为 name 不可能同时是 John 和 David

这是修正了 Bug

make me sick!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号