Jeg simulerede nøjagtig det samme scenarie som dit og fandt ud af:
Når en model(Post) har en has_many through
tilknytning derefter ved oprettelse af en forekomst af denne model, dvs. Post
sende en Hash
f.eks.:Post.new( JSON.parse(json) )
eller Post.new(id: 113)
Det ser ud til, at Rails behandler dem forskelligt, selvom de peger på den samme rekord.
Jeg kørte følgende kommandoer i rækkefølgen som angivet nedenfor:
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
I stedet for at oprette en ny forekomst af Post ved hjælp af Hash direkte, hentede jeg posten fra databasen ved hjælp af id
hentet fra deserialisering af json. I dette tilfælde er instansen p3
og instans p2
referer til det samme indlæg, men Rails fortolker dem forskelligt.