2016-11-08 4 views
0

Ich habe eine Funktion implementiert, die aufgerufen wird, wenn ein aktives Datensatzobjekt erfolgreich aktualisiert wird, aber ich muss den Vorher- und Nachher-Aktualisierungswert eines aktiven Datensatzwerts an diese Funktion übergeben. Ich versuche zu implementieren, ist in der folgenden Weise, aber der Wert, der übergeben wird, ist nur der aktualisierte Wert.Zugriff vor dem Aktualisierungswert des aktiven Datensatzobjekts

def update 
lead_before_update = @old_car_lead 

respond_to do |format| 
    if @old_car_lead.update(old_car_lead_params) 
    format.html { redirect_to @old_car_lead, notice: 'Lead was successfully updated.' } 
    format.json { render :show, status: :ok, location: @old_car_lead } 
    lead_after_update = @old_car_lead 

    Lead.send_lead(lead_before_update, lead_after_update) 

    else 
    format.html { render :edit } 
    format.json { render json: @old_car_lead.errors, status: :unprocessable_entity } 
    end 
end 

Ende

Wenn ich versuche, das Tal von lead_before_update und lead_after_update loggt sein, beobachte ich beide den gleichen Wert haben.

Kann jemand bitte sagen, wie man sowohl die vor der Aktualisierung und nach dem Update-Wert an die Funktion übergeben.

+0

Verwendung 'lead_before_update = @ old_car_lead.dup' –

+0

Lief wie am Schnürchen. Vielen Dank :) –

Antwort

0

lead_before_update und lead_after_update beide zeigen dasselbe Objekt (old_car_lead). Wenn es sich ändert, ändert sich alles.

Zwei Möglichkeiten, um hier:

  1. Sie sollten das Objekt duplizieren und einer Variablen zuweisen.

    lead_before_update = @old_car_lead.dup lead_after_update = @old_car_lead.dup

  2. können Sie @old_car_lead.attribute_name_was verwenden es wird Ihnen den vorherigen Wert des attribute_name

Referenz für die zweite Option: What is the ActiveModel method attribute "_was" used for?

Verwandte Themen