В MySQL есть очень хорошая опция для оператора INSERT
, которая особенно полезна для таблиц объединения без столбца id
. Он вставляет запись, но вместо того, чтобы выдать ошибку, если его ключ конфликтовал с существующим, эта запись обновляется. Вот пример:
INSERT INTO table (key1,key2,data) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE data=3;
Как добиться того же с Active Record? Результирующий код будет выглядеть следующим образом:
class Model < ActiveRecord::Base
belongs_to :key1
belongs_to :key2
end
record = Model.new
record.key1 = key1
record.key2 = key2
record.data = 'new data'
record.WHAT? #Inserts or updates `data` for the existing record