0

我正在尝试更新重复键上的字段,但它只是添加新记录而不是更新。

这是我想要做的

ActiveRecord::Base.connection.execute "insert into open_offer_counters (offer_id, udid, open_counter) values #{opened_events.join(", ")} on duplicate key update open_counter = open_counter + 1"

在我的迁移中,我指出了 2 个独特的领域

create_table :open_offer_counters do |t|
    t.integer :offer_id,            :unique => true
    t.string  :udid,                :unique => true
    t.integer :open_counter
  t.timestamps
end

任何想法代码有什么问题?

4

2 回答 2

1

您需要在这些列上添加唯一索引,例如

add_index :open_offer_counters, :offer_id, :unique => true

传递 :unique 作为列选项不会做任何事情

于 2012-10-29T11:39:16.017 回答
0

在您上面的脚本中,您正在更新 open_counter=open_counter+1 ,因此这将变得独一无二并添加新行。而是这样做。

ActiveRecord::Base.connection.execute "insert into open_offer_counters (offer_id, udid, open_counter) values #{opened_events.join(", ")} on duplicate key update open_counter = open_counter,offer_id=offer_id, udid=udid"
于 2012-10-29T11:39:55.643 回答