2010-04-02 8 views
5

DataMapper fornisce un modo conveniente per creare un nuovo record quando non ne esiste uno o ne aggiorna uno esistente? Non ho trovato nulla nella documentazione dell'API.DataMapper: crea nuovo record o aggiorna esistente

Questo è ciò che ho in questo momento che non sembra molto elegante:

foo = Foo.get(id) 
if foo.nil? 
    foo = Foo.create(#attributes...) 
else 
    foo.update(#attributes...) 
end 
foo.save 

risposta

4
Foo.first_or_create(:id=>id).update(attributes) 

o

(Foo.get(id) || Foo.new).update(attributes) 
+12

A partire dalla versione 1.1.0 questo solleva DataMapper :: UpdateConflictError, Foo # update non può essere chiamato su una nuova risorsa –

1

Cerco solo

Foo.first_or_create(:id=>id).update(attributes) 

ma a volte si sbaglia, quindi trovo alcuni suggerimenti da qui: DataMapper Docs

ora faccio il mio codice funziona come:

Foo.first_or_create({:id=>id}, {:name => name}).update(:id => id, :name => name) 

Spero che ti aiuta.