确定Rails中的记录/对象是否脏

den*_*iss 7 ruby activerecord ruby-on-rails ruby-on-rails-3

反正我是否在保存之前识别对象/记录是否脏,以及在Rails中哪些字段发生了变化?

假设我有一个Person模型,Person有一个名为name和age的属性.在db中,id为1的Person在20岁时被命名为"John".

p = Person.find 1
p.name #John
p.age #20
Run Code Online (Sandbox Code Playgroud)

现在,当我把他的名字从约翰改为内森时,我有什么方法可以识别

  1. 对象被更改(脏)
  2. 以及哪些字段已更改

现在我知道第一个答案.如果我改名为Nathna,我可以做以下事情

p.name = "Nathan"
p.changed? #true
Run Code Online (Sandbox Code Playgroud)

但是,无论如何,我是否确定哪个字段已更改?可能是一个返回已更改的字段数组的方法?

p.dirty_fields #[:name]
Run Code Online (Sandbox Code Playgroud)