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.