sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo mantengo has_many :through relaciones al serializar a JSON y volver a Rails 4.0.3?

Simulé exactamente el mismo escenario que el tuyo y descubrí:

Cada vez que un modelo (publicación) tiene un has_many through asociación luego al crear una instancia de ese modelo, es decir, Post pasando un Hash por ejemplo:Post.new( JSON.parse(json) ) o Post.new(id: 113) parece que Rails los trata de manera diferente aunque apuntan al mismo registro.

Ejecuté los siguientes comandos en la secuencia que se indica a continuación:

p = Post.last
p.tags
p.tags.count
json = p.to_json

p2 = Post.new( JSON.parse(json) )
p2.tags
p2.tags.count   ## Gives incorrect count

p3 = Post.find(JSON.parse(json)["id"])    ### See notes below
p3.tags
p3.tags.count   ## Gives the correct count

En lugar de crear una nueva instancia de Post usando Hash directamente, obtuve el registro de la base de datos usando el id obtenido al deserializar json. En este caso, la instancia p3 e instancia p2 se refieren a la misma publicación, pero Rails los interpreta de manera diferente.