Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie behalte ich has_many :through -Beziehungen beim Serialisieren zu JSON und zurück in Rails 4.0.3?

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.