2010-04-02 15 views
5

Bietet DataMapper eine bequeme Möglichkeit, einen neuen Datensatz zu erstellen, wenn keiner existiert oder einen vorhandenen zu aktualisieren? Ich konnte in der API-Dokumentation nichts finden.DataMapper: Neuen Datensatz erstellen oder vorhandene aktualisieren

Dies ist, was ich im Moment haben, die nicht sehr elegant erscheinen:

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

Antwort

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

oder

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

Ab Version 1.1.0 wird DataMapper :: UpdateConflictError ausgelöst, Foo # update kann nicht auf einer neuen Ressource aufgerufen werden –

1

Ich versuche einfach

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

aber es manchmal falsch, also finde ich ein paar Tipps von hier: DataMapper Docs

Jetzt mache ich meinen Code funktioniert wie:

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

Hoffe, dass es Ihnen hilft.

Verwandte Themen