2012-04-02 8 views
2

Ich habe ein paar Rückrufe vorbei, die auf Logaktivitäten erstellen/aktualisieren:current_user über Rückruf zu modellieren

class Projelement 
    .. 
    after_create { |p| p.log_projelement_activity "created" } 
    after_update { |p| p.log_projelement_activity "edited" } 

Ich brauche das Design zu erweitern die current_user (Devise) zu log_projelement_activity passieren den Benutzer aufzuzeichnen an die Zeit der Erstellung/Aktualisierung.

Ich versuche, die current_user von der Steuerung an das Modell und die Rückrufe über ein virtuelles Attribut zu übergeben. Aber das funktioniert nicht.

Der Code:

class Projelement 
    attr_accessor :modifying_user 

    after_create { |p| p.log_projelement_activity "created", modifying_user } 
    after_update { |p| p.log_projelement_activity "edited", modifying_user } 

    def log_projelement_activity(op_type, user) 
    @a = Activity.new 
    @a.user = user 
    end 
end 


class MilestoneController 
    .. 
    def create 
    @milestone = Milestone.new(params[:milestone]) 
    @milestone.modifying_user = current_user 
    end 
end 

Jede erstellen/aktualisieren Activity Werte zu erwarten hat, mit der Ausnahme, dass das user Feld nil.

Was fehlt mir?

+1

Sie meinen 'Projement.new', oder? Versuchen Sie, einen Benutzer zu 'params' hinzuzufügen,' @milestone = Projlement.new (params [: meilenstein] .merge (: modifying_user => current_user)) '. – shime

+0

Danke. Ich instanziiere einen '' Milestone'', der eine Art '' Projement'' ist. Dies hat ein paar zusätzliche Attribute und alle anderen Attribute werden richtig eingestellt, mit Ausnahme von '' modifying_user''. Leider hat dein Vorschlag nicht funktioniert: Wie ist es anders als vorher? –

Antwort

1

Sie könnten userstamp verwenden. Ich denke, dass dieses Juwel genau das tut, was du brauchst;) Ich habe es mit der Devise benutzt und es ... funktioniert einfach perfekt!

+0

Danke @santuxus. Habe es durchgesehen: es etwas schwierig zu finden, die Verwendung zu verstehen, da es ein bisschen abstrakt geschrieben ist. Verwende auch '' Mongoid''. Es scheint von vielen Leuten benutzt zu werden. –

+0

https://github.com/msaffitz/userstamp-mongoid sollte für Sie sein. Ich habe es nicht benutzt und der Hauptrepo ist 2 Jahre alt, aber ich denke, einer der Gabeln sollte in Ordnung und aktuell sein. – santuxus

+0

Danke, ja, ich habe gegoogelt und es auch gefunden –

Verwandte Themen