J'ai simulé exactement le même scénario que le vôtre et j'ai découvert :
Chaque fois qu'un modèle (Post) a un has_many through
association puis lors de la création d'une instance de ce modèle, c'est-à-dire Post
passer un Hash
par exemple :Post.new( JSON.parse(json) )
ou Post.new(id: 113)
semble que Rails les traite différemment bien qu'ils pointent vers le même enregistrement.
J'ai exécuté les commandes suivantes dans l'ordre indiqué ci-dessous :
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
Au lieu de créer une nouvelle instance de Post en utilisant Hash directement, j'ai récupéré l'enregistrement de la base de données en utilisant le id
obtenu à partir de la désérialisation de json. Dans ce cas, l'instance p3
et instance p2
font référence au même Post mais Rails les interprète différemment.