ruby-on-rails - generate - save json data in postgres
¿Cómo puedo actualizar el valor de un registro de datos con Ruby on Rails 4.0.1/PostgreSQL Hstore? (3)
Estoy encontrando un problema extraño que debe ser un error del usuario por mi parte pero no puedo resolverlo.
Estoy usando Ruby 1.9.3-p194, Rails 4.01, PostgreSQL.
Tengo un modelo, Cliente, con una columna llamada datos que es un tipo hstore . Por alguna razón, no puedo actualizar la columna de datos (hstore) con ninguna nueva clave / valor ni puedo actualizar el valor de una clave existente. Puedo hacer una inserción y especificar cualquier clave / valor sin ningún problema.
ID del cliente: 1, primer nombre: "Marca", último nombre: "Prueba", datos: {"balance" => "0"}, created_at: "2013-11-27 14:39:09", updated_at: "2013- 11-27 14:39:09 "
c.data["balance"] = "100"
c.save
(0.2ms) COMENZAR
(0.3ms) COMPROMISO => verdadero
Si hago un update_attributes, lo guarda.
c.update_attributes({:data => {"balance" => "343"}})
No veo ningún error o excepción cuando use c.save! . ¿Alguien tiene alguna idea?
Documentos de Hstore actualizados:
http://edgeguides.rubyonrails.org/active_record_postgresql.html#hstore
Están trabajando para usar la misma solución para la actualización de objetos Hstore y Json.
Esto será arreglado en Rails 4.2.
Solicitud de https://github.com/rails/rails/pull/15674 : https://github.com/rails/rails/pull/15674
Ok finalmente encontré una respuesta a mi pregunta. Resulta que es un error dentro de Rails 4.0.
"Error de ActiveRecord Hstore: no se puede actualizar una clave en el hash" https://github.com/rails/rails/issues/6127
Todavía necesitaba que esto funcionara ahora y no podía esperar a que se solucionara el error, así que aquí está mi solución:
c.data["balance"] = "100"
c.data_will_change!
c.save
... y se guardará en la base de datos!
El "attribute_name_will_change!" El método no está bien documentado y se puede encontrar en la introducción del módulo Active Model Dirty: http://api.rubyonrails.org/classes/ActiveModel/Dirty.html