Simuloval jsem přesně stejný scénář jako ten váš a zjistil jsem:
Kdykoli má model (příspěvek) has_many through
přidružení a poté při vytvoření instance tohoto modelu, tj. Post
předání Hash
např.:Post.new( JSON.parse(json) )
nebo Post.new(id: 113)
Zdá se, že Rails s nimi zachází jinak, ačkoli ukazují na stejnou desku.
Spustil jsem následující příkazy v pořadí uvedeném níže:
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
Namísto vytvoření nové instance Post pomocí hash přímo, jsem načetl záznam z databáze pomocí id
získané deserializací json. V tomto případě instance p3
a instance p2
odkazují na stejný příspěvek, ale Rails je interpretuje odlišně.