2012-10-29 143 views
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" 

在我迁移我的两个独特的领域

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 

任何想法,什么是错的代码指出?

回答

1

您需要添加这些列的唯一索引,如

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

传:作为唯一一列选项不会在你上面的脚本做任何事情

+0

这正是我所需要的。进行新的迁移并删除\ create \ seed db – Avdept

0

你AR eupdating的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"