即使修改了外键,对象也不会从关联中删除
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.transfers
或 batch2.transfers
,传输仍然存在于 batch
中并且不存在于 batch2
中。
这是内存中的对象没有自动与数据库同步的问题。之后可以看到预期的结果:
pry(main)> batch.reload
pry(main)> batch2.reload
我有两个模型:
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.transfers
或 batch2.transfers
,传输仍然存在于 batch
中并且不存在于 batch2
中。
这是内存中的对象没有自动与数据库同步的问题。之后可以看到预期的结果:
pry(main)> batch.reload
pry(main)> batch2.reload