访问活动记录对象的更新值之前

时间:2016-11-08 20:03:32

标签: ruby-on-rails activerecord rails-activerecord

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

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的值时,我发现它们都具有相同的值。

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

1 个答案:

答案 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

  3. 的先前值

    第二个选项的参考:What is the ActiveModel method attribute "_was" used for?