在重复密钥更新问题上

时间:2012-10-29 11:27:36

标签: mysql sql ruby-on-rails ruby-on-rails-3

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

这是我正在尝试做的事情

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"

在我的迁移中,我指出了两个独特的字段

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

任何想法代码都有问题吗?

2 个答案:

答案 0 :(得分:1)

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

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

传递:unique作为列选项不执行任何操作

答案 1 :(得分: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"