2016-01-28 9 views
7

La gemma paper_trail tiene traccia delle versioni e fa un buon lavoro. Tuttavia, c'è un caso limite che ho notato. Per la maggior parte degli oggetti, il controller dell'applicazione imposta whodunnit se si è connessi, e quindi tutti gli oggetti creati durante quella sessione hanno una versione che registra "whodunnit" in base a chi ha effettuato il login.Come impostare whodunnit per paper_trail quando si crea un nuovo utente?

Il caso interessante è dove nessuno è loggato perché un nuovo utente si sta registrando. L'utente viene creato con un whodunnit "nullo", il che è sbagliato perché in realtà l'utente è stato creato da solo.

Naturalmente, whodunnit non può conoscere l'ID dell'utente prima che il record utente viene salvato. Lo so.

Tuttavia, questo crea un conflitto più tardi, come i vari processi batch modificano anche i record utente, e non essere in una sessione web, creare anche versioni con record whodunnit nil.

ora non posso dire che ha creato l'utente - un processo batch di importazione o l'utente.

Sto meditando varie soluzioni, come forse rovistare il tavolo di Papertrail :: Versions per quell'oggetto e fissare il whodunnit, ma questo sembra piuttosto impuro.

Qualche consiglio?

risposta

1

È possibile forzare whodunnit nell'azione di creazione sul controller.

before_filter :only => [:create] do 
    PaperTrail.whodunnit = "Public User" 
end 

Se si insiste per avere l'id utente nella tabella delle versioni, si può fare questo:

ActiveRecord::Base.transaction do 
    @user.save! 
    @user.versions.first.update_attributes(:whodunnit => @user.id) 
end 
Problemi correlati