Симулирах точно същия сценарий като вашия и разбрах:
Всеки път, когато модел (Post) има has_many through
асоциация след това при създаване на екземпляр на този модел, т.е. Post
подаване на Hash
например:Post.new( JSON.parse(json) )
или Post.new(id: 113)
изглежда, че Rails ги третира по различен начин, въпреки че сочат към един и същ запис.
Изпълних следните команди в последователността, дадена по-долу:
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
Вместо да създавам нов екземпляр на Post, използвайки директно Hash, извадих записа от базата данни с помощта на id
получен от десериализирането на json. В този случай екземплярът p3
и екземпляр p2
отнасят се до същия пост, но Rails ги тълкува по различен начин.