2024年4月19日,星期五

ActiveRecord::Base#pluck 接受哈希值,devcontainers 改进以及更多!

由 vipulnsward 发布

大家好,周五快乐!希望你们在周末来临之际能有一些时间放松和休息 😎

我是 Vipul,带来“Rails 本周动态”的最新消息。让我们开始吧。

允许 ActiveRecord::Base#pluck 接受哈希值
此更改为 ActiveRecord::Base#pluck 添加了对接受哈希值的支持。

# Before
Post.joins(:comments).pluck("posts.id", "comments.id", "comments.body")

# After
Post.joins(:comments).pluck(posts: [:id], comments: [:id, :body])

同样适用于 .pick,它通过 .pluck 实现。

修复 :n_plus_one_only 模式下的子关联加载
:n_plus_one_only 模式下的严格加载旨在防止在深度遍历关联时出现性能问题。它允许 Person.find(1).posts,但不允许 Person.find(1).posts.map(&:category)。此修复避免了当 person.posts.first 预加载整个关联而不是允许用户管理子关联时出现的意外情况。

person = Person.find(1)
person.strict_loading!(mode: :n_plus_one_only)

# Before
person.posts.first
# SELECT * FROM posts WHERE person_id = 1; -- non-deterministic order

# After
person.posts.first # this is 1+1, not N+1
# SELECT * FROM posts WHERE person_id = 1 ORDER BY id LIMIT 1;

向 IntegrationTest 添加 save_and_open_page 助手
save_and_open_page 是一个 capybara 助手,允许开发人员在测试的任何给定时间点检查页面状态。此更改添加了 save_and_open_page 助手支持,允许从系统测试内部使用它们。

更改 devcontainer.json 以转发项目的已用端口
当前生成的 devcontainer.json 文件不会转发项目所需的端口,因此我们可能需要手动更改它才能在通过 devcontainer 运行时访问项目。此 PR 默认添加了项目所需的转发。

在创建带有 Javascript 的项目时,将 node 和 yarn 添加到 devcontainer
目前,在创建带有 Javascript 的 rails 项目(例如 --javascript=esbuild)时,不会将 node 或 yarn 添加到 devcontainer。此更改会在需要时同时添加两者。

修复 idle-detection 功能策略中的拼写错误
此更改修复了功能策略 idle-detection 中的一个小拼写错误,而不是 idle_detection,这之前导致此策略未被应用。

您可以在 这里查看所有更改的完整列表。
上周,我们有 17 位贡献者 为 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。