我已经实现了一个在成功更新活动记录对象时调用的函数,但我必须将活动记录值的更新前后值传递给该函数。我试图以下面的方式实现,但传递的值只是更新的值。
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 :(得分:0)
lead_before_update
和lead_after_update
都指向同一个对象(old_car_lead
)。当它改变时,它会改变所有。
这里有两种方式:
您应该复制对象并分配给变量。
lead_before_update = @old_car_lead.dup
lead_after_update = @old_car_lead.dup
您可以使用@old_car_lead.attribute_name_was
它会为您提供attribute_name
第二个选项的参考:What is the ActiveModel method attribute "_was" used for?