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á.

http://github.com/steveybaby/assoc_problem

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top