Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment conserver les relations has_many :through lors de la sérialisation vers JSON et retour dans Rails 4.0.3 ?

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.