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 に答える