Ik simuleerde exact hetzelfde scenario als het jouwe en kwam erachter:
Telkens wanneer een model (Post) een has_many through
. heeft associatie vervolgens bij het maken van een instantie van dat model, d.w.z. Post
doorgeven van een Hash
voor bijvoorbeeld:Post.new( JSON.parse(json) )
of Post.new(id: 113)
het lijkt erop dat Rails ze anders behandelt, hoewel ze naar hetzelfde record verwijzen.
Ik heb de volgende commando's uitgevoerd in de volgorde zoals hieronder aangegeven:
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
In plaats van een nieuw exemplaar van Post rechtstreeks met Hash te maken, haalde ik het record uit de database met behulp van de id
verkregen door het deserialiseren van json. In dit geval is de instantie p3
en instantie p2
verwijzen naar dezelfde post, maar Rails interpreteert ze anders.