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.