无法检测属性更改

时间:2015-03-27 19:53:35

标签: ruby-on-rails

编写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

我可能做错了什么?

2 个答案:

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