大家好,我是 Greg,将为您带来 Rails 代码库的最新改动。
Rails World 网站上线啦!
Rails World 会议网站今日上线。它由 Rails 社区的初级开发者 Shona Chan 创建。它由 Rails Foundation 委托,Katya Sitko 设计并在 Ayush Newatia 的指导下创建。
Rails World 门票今日开始出售!
Rails World 门票今日开始出售,6 月 23 日(星期五)欧洲中部时间下午 5 点开始,首批发售早鸟票。不要错过,阿姆斯特丹见!
修复 EncryptedConfiguration 无法像 Hash 一样运行的问题
之前,EncryptedConfiguration
使用 InheritableOptions
,以便像方法一样调用键。后来对其做了更改,以确保它既像 Hash
,又像 OrderedOptions
一样运行。此第二次更改意外中断了 #keys
、~#to_h
等方法,因此 Rails.application.credentials.to_h
返回了一个空哈希,即使设置了凭据也是如此。此请求修复了此问题,并且修复程序也 已移植到 7-0-stable。
增加对使复合主键 has_one 关联无效的支持
创建此请求是因为 has_one
复合主键 (CPK) 与 dependent: :nullify
的关联已中断。它更改了 ActiveRecord::Associations::HasOneAssociation
中的无效化代码,以迭代遍历外键列,并在这些列不属于模型主键时将其无效化。
禁止在 Active Record 中将 *id* 作为枚举值
此更改禁止在 Active Record 中将 id
作为枚举值,因为它会导致意外的联接和子查询。如果你仍想使用它,可以使用已设置的 \_prefix
或 \_suffix
选项。
更新 Action Text,使其在可用时使用 HTML5
此请求更新了 Action Text,使其在可用时使用 HTML5 清理器,并在可用时使用 Nokogiri::HTML5
解析标记。之前,Action Text 使用 Nokogiri 的 HTML4 解析器来进行这些操作。
不要对 Rails.application.config#inspect 显示 secret_key_base
调用 Rails.application.config#inspect
时,它展示了所有属性,包括 secret_key_base
,此拉取请求覆盖 inspect
方法,仅展示类名称。此操作有助于避免意外输出敏感信息。对 MessageEncryptor 和 EncryptedConfiguration 进行了相同改动
在 to_fs 中支持无起始和无终止范围
此拉取请求在 to_fs
中添加了对无起始/无终止范围的支持。它会像此例中所示的那样工作
> (0..1).to_fs(:db)
=> "BETWEEN '0' AND '1'"
> (..1).to_fs(:db)
=> "< '1'"
> (0..).to_fs(:db)
=> "> '0'"
错误修复:确保在 CPK 的一部分发生更改时保存 has_one 关联
如果 has_one 关联使用复合主键,并且复合主键的一部分在所有者上发生更改,则这些更改需要反映在所属对象的外键上。
以前此操作无法正常工作,因为 #_record_changed?
无法处理复合主键关联,因此我们无法识别所有者主键更改时需要更新所属对象的外键。
预加载复合主键模型
此拉取请求更改了连接依赖项分配,以正确处理具有复合主键的节点,从而修复了具有复合主键的预加载模型和关联。
自动保存 has_one 关联时使用 _read_attribute
此拉取请求修复了一个问题,即当关联主键设置为 :id
时,复合主键模型无法正确自动保存。在使用复合主键的模型中, #id
访问器将返回一个数组,而我们实际上想要的是 ID 列值。通过将 has_one
自动保存更改为使用 _read_attribute
而非 public_send
,它将不会使用 #id
访问器。
将范围应用于关联子查询
此拉取请求确保将范围应用于关联(belongs_to/has_one/has_many)子查询。例如,如果您有此关联:has_many :welcome_posts, -> { where(title: "welcome") }
之前
Author.where(welcome_posts: Post.all)
#=> SELECT (...) WHERE "authors"."id" IN (SELECT "posts"."author_id" FROM "posts")
```
After:
```ruby
Author.where(welcome_posts: Post.all)
#=> SELECT (...) WHERE "authors"."id" IN (SELECT "posts"."author_id" FROM "posts" WHERE "posts"."title" = 'welcome')
您可以在 此处 查看整个变更列表。
本周有 21 位贡献者 为 Rails 代码库做出贡献!
下期再见!
订阅 以通过邮件接收这些更新。