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.