我正在处理从 Rails 4 -> Rails 5 升级后行为变化引起的错误。
在模型上,我们有一个这样声明的 has_many 关联:
has_many :things, foreign_key: :special_id, primary_key: :special_id
当special_id
父模型上的字段为零时,就会出现问题。在 Rails 4 中,该场景产生以下查询:
SELECT * FROM "things" WHERE "things"."special_id" = $1 [["special_id", nil]]
返回零记录。(即在 NULL 外键上不匹配)
在 Rails 5 中,查询变为:
SELECT * FROM "things" WHERE "things"."special_id" IS NULL
它返回事物表中的每条记录,并带有 NULL special_id。(即在 NULL 外键上匹配)
现有模型的回调期望具有 NULL special_id 的模型具有零 :things 与之关联。是否有构建此关联的选项或替代方法,它将省略 foreign_key 字段中具有 NULL 的子记录?