即使修改了外键,对象也不会从关联中删除

Object is not removed from association even after foreign key is modified

我有两个模型:

class Batch < ApplicationRecord
  has_many :transfers, dependent: :destroy
end

class Transfer < ApplicationRecord
  belongs_to :batch
end

我通过一个工厂创建了一个包含 2 个传输的批次:

pry(main)> batch = FactoryBot.create(:batch_with_txs, tx_count: 2)
=>  #<Batch:0x000055d25d6c81f0 id: 4>

pry(main)> batch.iso20022_transfers                               
=> [#<Transfer:0x000055d25899e780
  id: 11,
  batch_id: 4>,
 #<Transfer:0x000055d25899da38
  id: 12,
  batch_id: 4>]

我想创建第二批并将一个转移从第一批转移到第二批:

pry(main)> batch2 = FactoryBot.create(:batch)
=> #<Batch:0x000055d25cc291b8 id: 5>

pry(main)> tx = Transfer.find(11)
(…)
pry(main)> tx.batch = batch2
(…)
pry(main)> tx.save
=> true

但是如果我检查 batch.transfersbatch2.transfers,传输仍然存在于 batch 中并且不存在于 batch2 中。

这是内存中的对象没有自动与数据库同步的问题。之后可以看到预期的结果:

pry(main)> batch.reload
pry(main)> batch2.reload