Domanda

Ho un has_many:. Attraverso la relazione che associa ai giocatori di squadre TRAMITE gestioni

Voglio avere un contatore sul tavolo squadre (un po 'come una cache contatore) che mi dice il numero di associazioni di nuovo ci sono stati fin dall'inizio della settimana. Naturalmente una cache contatore non funzionerà perché sarà sempre dare tutte le associazioni che sono state mai creato.

Ho provato ad aggiornare il team associato all'interno del modello di management. Questo non riesce mai. Anche se l'incremento alla squadra associata sembra essere salvati OK, dopo l'associazione è stato creato il mio contatore è ancora 0.

Ho anche provato ad utilizzare un osservatore. L'osservatore stato chiamato come mi aspettavo, sono stato in grado di recuperare la squadra, ma gli eventuali aggiornamenti ad esso, ancora una volta, non sono state salvate.

Sono sicuro che mi manca qualcosa di ovvio! Qual è il modo rotaie per implementare questo?

I ha installato un github per illustrare il problema, in esecuzione rake spec fallirà.

http://github.com/steveybaby/assoc_problem

È stato utile?

Soluzione

Nel vostro spec:

fanteam_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

In pratica il vostro osservatore aggiorna lo stesso record, ma non lo stesso oggetto.

Altri suggerimenti

Ho il sospetto che il problema è che hai chiamato il changes campo contatore, che è già un metodo ActiveRecord per ispezionare le modifiche agli attributi di un record di dall'ultimo salvataggio. Prova a cambiare il nome di quel campo e vedere se il codice funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top