2016-11-08 76 views
0

我已经实现了一个函数,当活动记录对象成功更新时调用,但我必须将活动记录值的前后更新值传递给该函数。我试图通过以下方式实现,但通过的值只是更新后的值。在更新之前访问活动记录对象的值

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 

当我尝试登录lead_before_update和lead_after_update的山谷,我看到都具有相同的价值。

任何人都可以请告诉如何将更新前和更新后的值都传递给函数。

+0

使用'lead_before_update = @ old_car_lead.dup' –

+0

像魅力一样工作。谢谢 :) –

回答

0

lead_before_updatelead_after_update都指向相同的对象(old_car_lead)。当它改变时,它全部改变。

两种方法在这里:

  1. 您应该复制对象,并分配给一个变量。

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

  2. 您可以使用@old_car_lead.attribute_name_was它会给你的第二个选项attribute_name

参考的前值:What is the ActiveModel method attribute "_was" used for?