Ich habe genau das gleiche Szenario wie Ihres simuliert und herausgefunden:
Immer wenn ein Modell (Post) einen has_many through
hat Assoziation dann beim Erstellen einer Instanz dieses Modells, d. h. Post
Übergeben eines Hash
zum Beispiel:Post.new( JSON.parse(json) )
oder Post.new(id: 113)
Scheint, als würde Rails sie unterschiedlich behandeln, obwohl sie auf denselben Datensatz verweisen.
Ich habe die folgenden Befehle in der unten angegebenen Reihenfolge ausgeführt:
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
Anstatt eine neue Instanz von Post direkt mit Hash zu erstellen, habe ich den Datensatz mit der id
aus der Datenbank abgerufen erhalten durch Deserialisierung von json. In diesem Fall die Instanz p3
und Instanz p2
beziehen sich auf denselben Beitrag, aber Rails interpretiert sie anders.