2022年11月25日 星期五

禁用 enum 方法生成、并发修复以及更多!

由 gregmolnar 发布

您好,我是Greg,为您带来Rails的最新动态。

确保并发 map 使用是线程安全的此拉取请求更改了处理缓存未命中(cache miss)的方式。它使其线程安全,并确保在执行过程中不会被覆盖。

自动加载 ActiveModel::ValidationError此拉取请求为 Active Model 中的 ValidationError 添加了缺失的自动加载调用。

在记录的最新副本上执行 before_committed! 回调在此更改之前,只使用同一记录的早期副本(对象 ID 不同,但指向数据库中的同一条记录)来执行回调,但它没有 touch_later 信息。

即使在 Active Record 不存在的情况下也确保 file_fixture_path 已设置当使用 --skip-active-record 生成应用时,file_fixture 助手会失败,因为 file_fixture_path 仅在 ActiveRecord::Base 存在时定义。此拉取请求即使在 Active Record 不存在的情况下也会加载测试助手。

将 X-Forwarded-To 地址添加到收件人此拉取请求增强了 Mail::Message#recipients,以包含电子邮件转发到的地址。

允许 FormBuilder#fields 和 FormBuilder#fields_for 中的类 Hash 模型此拉取请求更改了 ActionView::Helpers::FormBuilder#fields_for 解释参数的方式。在确定 record_object 参数实际上是 fields_options 参数之前,Rails 现在会检查 fields_options 是否未被显式提供。

添加构建持久化方法此拉取请求向 ActiveRecord::Persistence 添加了一个构建方法,它构建一个或多个对象并返回构建的对象或对象。以下是几个使用示例:

# Build a single new object
User.build(first_name: 'Jamie')

# Build an Array of new objects
User.build([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])

# Build a single object and pass it into a block to set other attributes.
User.build(first_name: 'Jamie') do |u|
  u.is_admin = false
end

允许按属性设置 YAML 序列化选项此拉取请求增加了按属性设置 YAML 序列化选项的功能,以及当前的全局设置。

为 select 助手添加 optgroups 的 HTML 属性支持通过此更改,在使用分组/嵌套集合时,select 的选项可以选择性地包含 HTML 属性作为子数组的最后一个元素。

<%= form.select :foo, [["North America", [["United States","US"],["Canada","CA"]], { disabled: "disabled" }]] %>
# => <select><optgroup label="North America" disabled="disabled"><option value="US">United States</option><option value="CA">Canada</option></optgroup></select>

允许重置单一关联has_onebelongs_to 关联现在会在拥有者模型上定义一个 reset_association 方法(其中“association”是关联的名称)。此方法会卸载任何已缓存的关联记录,并导致下一次访问时从数据库中查询它。拉取请求描述中有一个使用示例。

避免验证未更改的 belongs_to 关联通过此更改,Rails 会避免验证未更改的 belongs_to 关联。之前,在更新记录时,Active Record 会执行额外的查询来检查 belongs_to 关联是否存在(如果配置为强制存在),即使该属性未更改。目前,仅检查 belongs_to 相关的列是否存在。此方法可能导致孤立记录。要避免此问题,您需要使用外键。此行为可以通过配置来控制

config.active_record.belongs_to_required_validates_foreign_key = false

并且在默认情况下将使用 load_defaults 7.1 禁用。

在连接失败时恢复 Action Cable Redis pub/sub 监听器Redis pub/sub 适配器现在在 Redis 连接丢失时会自动重新连接。

添加选项以禁用 ActiveRecord.enum 生成的所有方法此拉取请求向 enum 定义添加了 instance_methods 选项。当将其设置为 false 时,Active Record 将不会生成它默认生成的实例方法。

这是一个很长的问题,即使如此,它也未能涵盖上周的所有内容。您可以在这里查看所有更改。上周我们有 24 位贡献者 为 Rails 做出了贡献!

如果您庆祝感恩节,祝您感恩节快乐,我们下周见!

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