Redis
 sql >> Database >  >> NoSQL >> Redis

Come posso mantenere le relazioni has_many:through durante la serializzazione su JSON e di nuovo in Rails 4.0.3?

Ho simulato lo stesso identico scenario come il tuo e l'ho scoperto:

Ogni volta che un modello (Post) ha un has_many through associazione quindi dopo aver creato un'istanza di quel modello, ad esempio Post passando un Hash ad esempio:Post.new( JSON.parse(json) ) o Post.new(id: 113) sembra che Rails li tratti in modo diverso anche se puntano allo stesso record.

Ho eseguito i seguenti comandi nella sequenza indicata di seguito:

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

Invece di creare una nuova istanza di Post utilizzando direttamente Hash, ho recuperato il record dal database utilizzando id ottenuto dalla deserializzazione di json. In questo caso, l'istanza p3 e istanza p2 fare riferimento allo stesso Post ma Rails li interpreta in modo diverso.