所以我有我的表格,在我的控制器中我有我的更新方法如下
def update
@student = Student.find(params[:id])
if @student.update_attributes!(student_params)
@student.read_notes = true
#here i check if the records changed or not?
ap @student.name_changed?
end
end
def student_params
params.require(:student).permit(:name, :email, :age, :class)
end
这失败了,因为我每次都会得到错误的回复,即使我实际上已对名称记录进行了更改。
如果我通过这种方式更新,我如何实际跟踪记录中的更改?
答案 0 :(得分:0)
当您保存记录时(update_attributes!
,update!
和update
都会执行此操作),Rails的“脏跟踪”会重置,您无法轻易判断是否有任何内容改变。您可以做的是使用assign_attributes
,如下所示:
def update
@student = Student.find(params[:id])
@student.assign_attributes(student_params)
if @student.name_changed?
# ...
end
@student.save!
end
还有一个名为previous_changes
的ActiveRecord方法,用于存储保存后所做的更改。 This article详细介绍了如何使用它。
您还可以简单地跟踪name
参数是否与记录的name
不同,或者在更新之前存储该值,然后根据您的需要进行比较。