你好,我是Greg,为你带来 Rails 代码库的最新变动。
Rails World 网站上线了!
Rails World 大会网站今天起上线。该网站由 Rails 社区的初级开发者 Shona Chan 创建。该项目由 Rails 基金会委托,由 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。
为 nullify 复合主键 has_one 关联添加支持
创建此拉取请求是因为 has_one 复合主键 (CPK) 关联(带有 dependent: :nullify)出现了故障。它更改了 ActiveRecord::Associations::HasOneAssociation 中的 nullify 代码,以迭代外键列并在这些列不属于模型的primary keys时将它们 nullify。
在 Active Record 中禁止将 *id* 作为枚举值
此更改在 Active Record 中禁止将 id 作为枚举值,因为这可能导致意外的 join 和 subquery。如果您仍想使用它,可以通过设置 _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'"
Bugfix:确保在 CPK 部分发生更改时保存 *has_one* 关联
如果一个 *has_one* 关联使用复合主键,并且复合主键的一部分在所有者上发生更改,则需要将这些更改反映在所属对象的外部键上。
以前,这无法正常工作,因为 #_record_changed? 未经处理来处理复合主键关联,因此当所有者的主键发生更改时,我们未能识别出所属对象的外部键需要更新。
预加载复合主键模型
此拉取请求更改了 join 依赖项分配,以正确处理具有复合主键的节点,从而修复了预加载具有复合主键的模型和关联的问题。
使用 _read_attribute 自动保存 has_one 关联
此拉取请求修复了复合主键模型在将其关联主键设置为 :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 代码库做出了贡献!
下次再见!
订阅以通过邮件获取这些更新。