Jag simulerade exakt samma scenario som ditt och fick reda på:
Närhelst en modell(Post) har en has_many through association sedan när du skapar en instans av den modellen, dvs. Post skicka en Hash till exempel:Post.new( JSON.parse(json) ) eller Post.new(id: 113) verkar som att Rails behandlar dem olika även om de pekar på samma rekord.
Jag körde följande kommandon i sekvensen nedan:
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
Istället för att skapa en ny instans av Post med Hash direkt, hämtade jag posten från databasen med id erhålls från deserialisering av json. I det här fallet, instansen p3 och instans p2 hänvisar till samma inlägg men Rails tolkar dem olika.