我有一个名为 decoders_contracts 的表格,其中包含以下属性:
id | decoder_id | contract_id
1 3 31
2 3 31
3 1 31
4 1 31
...
我需要以这种方式交换decoder_id:
id | decoder_id | contract_id
1 1 31
2 1 31
3 3 31
4 3 31
...
我试过这样的东西,但它不起作用:
contract_id = params[:contract_id] # 31
dc1 = params[:dc1] # 1
dc2 = params[:dc2] # 3
DecodersContract.where(contract_id: contract_id, decoder_id: dc1).update_all(decoder_id: dc2)
DecodersContract.where(contract_id: contract_id, decoder_id: dc2).update_all(decoder_id: dc1)
所有decoders_id都变为 1
答案 0 :(得分:1)
是的,你不能这样做。在第一个where
之后,所有DecodersContract
都具有相同的值。
最好是拥有一个中间值,最好是一个不能自然发生的值。
DecodersContract.where(contract_id: contract_id, decoder_id: dc1).update_all(decoder_id: 999)
DecodersContract.where(contract_id: contract_id, decoder_id: dc2).update_all(decoder_id: dc1)
DecodersContract.where(contract_id: contract_id, decoder_id: 999).update_all(decoder_id: dc2)