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.