私はあなたとまったく同じシナリオをシミュレートし、次のことを発見しました:
モデル(投稿)に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
Hashを直接使用してPostの新しいインスタンスを作成する代わりに、idを使用してデータベースからレコードをフェッチしました jsonの逆シリアル化から取得。この場合、インスタンスp3 およびインスタンスp2 同じ投稿を参照しますが、Railsはそれらを異なる方法で解釈しています。