编写this stackoverflow帖子,我可以使用以下方法检测属性更改:
self.changes
当我在模型中使用时 工作,例如在after_update回调中:
def check_activity
changes = self.changes
puts changes
end
不幸的是,它无法在我的控制器更新操作中运行。在保存任务之前和任务保存之后我尝试使用它:
def update
changes = @task.changes
if @task.update_attributes(task_params)
changes2 = @task.changes
flash[:notice] = "Successfully updated task."
redirect_to polymorphic_path([@taskable, @task])
else
render :edit
end
end
不幸的是,在这两种情况下,它都是空的:
Empty ActiveSupport::HashWithIndifferentAccess
我可能做错了什么?
答案 0 :(得分:1)
进行更改后没有显示任何更改(IE update_attributes运行)
您可以尝试使用assign_attributes而不是update_attributes,检查一切是否有效(object.valid?)获取更改然后保存
答案 1 :(得分:0)
只需查看ActiveModel::Dirty
保存后,更改方法不会返回更改。您应该在保存之前使用它,如果要在保存后检查值,请使用这些值previous_changes
等进行详细检查http://api.rubyonrails.org/classes/ActiveModel/Dirty.html.