【问题标题】:On duplicate key update issue关于重复密钥更新问题
【发布时间】:2012-10-29 11:27:36
【问题描述】:

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

这就是我想要做的事情

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

你知道代码有什么问题吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    传递 :unique 作为列选项没有任何作用

    【讨论】:

    • 这正是我所需要的。进行了新的迁移和 drop\create\seed db
    【解决方案2】:

    在您的上述脚本中,您正在更新 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-30
      • 2015-06-30
      • 1970-01-01
      • 2014-10-31
      • 2018-06-24
      • 1970-01-01
      • 2019-07-23
      • 2013-03-07
      相关资源
      最近更新 更多