Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Como mantenho relacionamentos has_many :through ao serializar para JSON e voltar no Rails 4.0.3?


Simulei exatamente o mesmo cenário como o seu e descobri:

Sempre que um modelo (Post) tem um has_many through associação, em seguida, ao criar uma instância desse modelo, ou seja, Post passando um Hash por exemplo:Post.new( JSON.parse(json) ) ou Post.new(id: 113) parece que o Rails os trata de maneira diferente, embora estejam apontando para o mesmo registro.

Executei os seguintes comandos na sequência, conforme indicado abaixo:
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

Em vez de criar uma nova instância do Post usando o Hash diretamente, busquei o registro do banco de dados usando o id obtido da desserialização do json. Nesse caso, a instância p3 e instância p2 referem-se ao mesmo Post, mas o Rails está interpretando de forma diferente.