2013-07-16 15 views
5

Impossibile trovare alcun modo decente di aggiungere questo costrutto a livello di modello.Come possiamo avere il costrutto "ON DUPLICATE KEY UPDATE" in ActiveRecord?

Lo scopo principale è "inserire_or_aggiornamento", ma non leggere read => verifica esistenza => scrittura o aggiornamento dal livello ActiveRecord.

Eventuali suggerimenti?

Trovato qualche codice deprecato correlato però.

http://apidock.com/rails/ActiveRecord/Base/create_or_update http://apidock.com/rails/ActiveRecord/Base/update_attributes

risposta

2

che stai dopo first_or_initialize, che è possibile combinare con una in cui, come in:

instance = Model.where(:attr1 => 'value1').first_or_initialize(:attr2 => 'value2') 
# do something with instance 
instance.save 

Se non si dispone di operare sul caso prima di salvarla, puoi anche usare first_or_create

+18

Questo è diverso da 'ON DUPLICATE KEY UPDATE' poiché non fornisce le stesse garanzie atomiche – ghempton

Problemi correlati