2016-09-24 13 views
0

habe ich ein Problem mit Nachverfolgen von Änderungen in Attributen hier ist mein ModellVerfolgen von Änderungen in Attributen

class Ticket < ActiveRecord::Base 
    include Generator 
    around_update :create_history 
    def create_history  
    @event_status = "Status to #{self.status}.\n" if status_changed?  
    @event_owner = "Now it is provided by #{self.stuff.name}\n" if stuff_id_changed? 
    yield  
    histories.create(event: "Changed! #{@event_status} #{@event_owner} On #{self.updated_at.utc}") if @event_status || @event_owner 
    end 
end 

Aktion Update

def update 
    flash[:notice] = "Your ticket successfully updated."  
    @ticket.update!(ticket_params.merge(status: 0))  
end 

trivial ist, aber das funktioniert nicht (Angaben auf die Schaffung Geschichte Ich kämpfe mit diesem für Stunden. Wäre sehr dankbar für jede Antwort, die meinen Fehler zeigt

+0

Sie Benutzer 'ticket_params.merge (Status: 0)' so Ihr 'Status' ist immer' 0'. es ändert sich nicht – Aleksey

+2

auch würde ich empfehlen, [paper_trail] (https://github.com/airbla/paper_trail) gem. Es hat sehr schöne Funktionen für die Versionierung Ihrer Modelle. – Aleksey

+1

und was ist mit 'stuff_id' Werten? ist es wirklich irgendwie verändert? – Aleksey

Antwort

1

Es ist schwer zu sagen, was genau falsch ist mit deinem Code.

Eine Sache ist ticket_params.merge(status: 0). Seit dem ist deine status immer 0 und wurde nie geändert.

Solange ich nicht sehen kann ticket_params kann ich nicht genau sagen, was mit stuff_id Änderungen falsch ist.

Ich habe das gleiche around_update Rückruf in meinem Test-Projekt erstellt und es funktioniert gut.

Die Hauptsache, ich möchte beachten, dass Sie paper_trail Edelstein für den Umgang mit Ihren Modellen Geschichte verwenden sollten. Das Juwel ist fantastisch und Sie würden es wirklich lieben.

+0

Ja, Juwel ist super sexy danke Mann! –

Verwandte Themen