Atualizando um registro associado a partir de um modelo de tabela de junção
-
20-09-2019 - |
Pergunta
Eu tenho um Has_Many: através do relacionamento associando jogadores a equipes por meio de gerentes.
Quero ter um balcão na mesa de equipes (um pouco como um contador) que me diz quantas novas associações existem desde o início da semana. É claro que um contador não funcionará porque sempre dará a todas as associações que já foram criadas.
Tentei atualizar a equipe associada a partir do modelo de gerenciamento. Isso nunca é bem -sucedido. Embora o incremento para a equipe associado pareça ser salvo, depois que a associação é criada, meu contador ainda é 0.
Eu também tentei usar um observador. O observador foi chamado como eu esperava, pude recuperar a equipe, mas quaisquer atualizações para ele, novamente, não foram salvas.
Tenho certeza de que estou perdendo algo óbvio! Qual é a maneira do Rails de implementar isso?
Eu configurei um github para ilustrar o problema, a execução do RAKE SPEC falhará.
Solução
Em sua especificação:
FantaM_Spec.rb
it "should be able to create a fanteam" do
@fanteam.save
@fanteam.changes.should be(0)
@fanteam.should be_valid
@fanteam.players << Factory.build(:player)
@fanteam.reload # this is what you are forgetting
@fanteam.changes.should be(1)
end
Basicamente, seu observador atualiza o mesmo registro, mas não o mesmo objeto.
Outras dicas
Eu suspeito que o problema é que você nomeou o Counter Field changes
, que já é um método ActiveRecord para inspecionar alterações nos atributos de um registro desde o último salvamento. Tente alterar o nome desse campo e veja se o seu código funciona.