sql >> Database >  >> NoSQL >> Redis

Hoe bewaar ik has_many:through-relaties bij het serialiseren naar JSON en terug in Rails 4.0.3?

Ik simuleerde exact hetzelfde scenario als het jouwe en kwam erachter:

Telkens wanneer een model (Post) een has_many through . heeft associatie vervolgens bij het maken van een instantie van dat model, d.w.z. Post doorgeven van een Hash voor bijvoorbeeld:Post.new( JSON.parse(json) ) of Post.new(id: 113) het lijkt erop dat Rails ze anders behandelt, hoewel ze naar hetzelfde record verwijzen.

Ik heb de volgende commando's uitgevoerd in de volgorde zoals hieronder aangegeven:

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

In plaats van een nieuw exemplaar van Post rechtstreeks met Hash te maken, haalde ik het record uit de database met behulp van de id verkregen door het deserialiseren van json. In dit geval is de instantie p3 en instantie p2 verwijzen naar dezelfde post, maar Rails interpreteert ze anders.



  1. Moet ik de verbinding expliciet verbreken?

  2. MongoDB $vloer

  3. MongoDB-aggregatie binnen dagelijkse groepering

  4. opdrachtregelauthenticatie van mongo mislukt