Rails - 交换属性值

时间:2016-03-10 21:55:18

标签: ruby-on-rails

我有一个名为 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

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)