私はあなたとまったく同じシナリオをシミュレートし、次のことを発見しました:
モデル(投稿)に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はそれらを異なる方法で解釈しています。