Saya mensimulasikan skenario yang sama persis seperti Anda dan menemukan:
Setiap kali model(Posting) memiliki has_many through asosiasi kemudian setelah membuat instance dari Model itu yaitu, Post melewati Hash misalnya:Post.new( JSON.parse(json) ) atau Post.new(id: 113) sepertinya Rails memperlakukan mereka secara berbeda meskipun mereka menunjuk ke catatan yang sama.
Saya menjalankan perintah berikut dalam urutan seperti yang diberikan di bawah ini:
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
Alih-alih membuat instance baru Post menggunakan Hash secara langsung, saya mengambil catatan dari database menggunakan id diperoleh dari deserializing json. Dalam hal ini, contoh p3 dan contoh p2 merujuk ke Post yang sama tetapi Rails menafsirkannya secara berbeda.