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.