2010-04-02 17 views
5

¿DataMapper proporciona una forma conveniente de crear un nuevo registro cuando no existe ninguno o actualizar uno existente? No pude encontrar nada en la documentación de la API.DataMapper: Crear nuevo registro o actualizar existente

Esto es lo que tengo en este momento que no parece muy elegante:

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

Respuesta

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

o

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

A partir de la versión 1.1.0 esto aumentará DataMapper :: UpdateConflictError, no se puede llamar a la actualización de Foo # en un nuevo recurso –

1

Sólo trato

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

pero se equivoca a veces, entonces encuentro algunos consejos de aquí: DataMapper Docs

ahora hago mi código funciona como:

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

espero que le ayuda.

Cuestiones relacionadas