2016-01-28 5 views
7

Der "paper_trail" -Editor verfolgt Versionen und macht einen guten Job. Es gibt jedoch einen Randfall, den ich bemerkt habe. Bei den meisten Objekten setzt der Anwendungscontroller whodunnit, wenn Sie angemeldet sind, und alle Objekte, die während dieser Sitzung erstellt werden, haben eine Version, die "whodunnit" aufzeichnet.Wie setze ich whodunnit für paper_trail beim Erstellen eines neuen Benutzers?

Der interessante Fall ist, wo niemand ist angemeldet, weil sich ein neuer Benutzer anmeldet. Der Benutzer wird mit einem "nil" -Hodrum erstellt, was falsch ist, weil der Benutzer tatsächlich selbst erstellt wurde.

Natürlich kann whodunnit die ID des Benutzers nicht kennen, bevor der Benutzerdatensatz gespeichert wird. Ich weiß das.

Dies führt jedoch später zu einem Konflikt, da verschiedene Stapeljobs auch Benutzerdatensätze ändern und nicht in einer Websitzung erstellt werden. Sie können auch Versionen mit null Protokollsätzen erstellen.

Jetzt kann ich nicht sagen, wer den Benutzer erstellt hat - einige Batch-Import-Prozess oder der Benutzer.

Ich denke über verschiedene Lösungen nach, wie vielleicht das Durchsuchen der Papertrail :: Versions Tabelle für das Objekt und das Reparieren von Krimskrams, aber das scheint ziemlich unsauber.

Irgendwelche Ratschläge?

Antwort

1

Sie können whodunnit in der Erstellungsaktion auf Ihrem Controller erzwingen.

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

Wenn Sie darauf bestehen, den Benutzer-ID in der Versionstabelle auf, so können Sie dies tun:

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