changes
保存之前有值,保存之后值清空
# attr => [original value, new value]
person.changes # => {}
person.name = 'name1'
person.changes # => { "name" => ["bill", "bob"] }
# before_validation => { "name" => ["bill", "bob"] }
# before_save => { "name" => ["bill", "bob"] }
# before_create => { "name" => [nil, "bob"] }
# after_create => {}
# after_save => {}
# before_commit => {}
# after_commit => {}
previous_changes
保存之后有值
# attr => [original value, new value]
person.previous_changes # => {}
person.name = 'robert'
person.previous_changes # => {}
person.save
person.previous_changes # => {"name" => ["bob", "robert"]}
# before_validation => {}
# before_save => {}
# before_create => {}
# after_create => {"name" => ["bob", "robert"]}
# after_save => {"name" => ["bob", "robert"]}
# before_commit => {"name" => ["bob", "robert"]}
# after_commit => {"name" => ["bob", "robert"]}
changed_attributes
attr => original value
person.changed_attributes # => {}
person.name = 'bob'
person.changed_attributes # => { "name" => "bob" }
# before_validation => { "name" => "bob" }
# before_save => { "name" => "bob" }
# before_create => { "name" => nil }
# after_create => {}
# after_save => {}
# before_commit => {}
# after_commit => {}
回调
before_validation :before_validation_func
before_create :before_create_func
after_create :after_create_func
before_save :before_save_func
after_save :after_save_func
before_commit :before_commit_func
after_commit :after_commit_func
def before_validation_func
pp "changed_attributes before validation: #{changed_attributes}"
pp "changes before validation: #{changes}"
pp "previous_changes before validation: #{previous_changes}"
end
def before_create_func
pp "changed_attributes before create: #{changed_attributes}"
pp "changes before create: #{changes}"
pp "previous_changes before create: #{previous_changes}"
end
def after_create_func
pp "changed_attributes after create: #{changed_attributes}"
pp "changes after create: #{changes}"
pp "previous_changes after create: #{previous_changes}"
end
def before_save_func
pp "changed_attributes before save: #{changed_attributes}"
pp "changes before save: #{changes}"
pp "previous_changes before save: #{previous_changes}"
end
def after_save_func
pp "changed_attributes after save: #{changed_attributes}"
pp "changes after save: #{changes}"
pp "previous_changes after save: #{previous_changes}"
end
def before_commit_func
pp "changed_attributes before commit: #{changed_attributes}"
pp "changes before commit: #{changes}"
pp "previous_changes before commit: #{previous_changes}"
end
def after_commit_func
pp "changed_attributes after_commit : #{changed_attributes}"
pp "changes after commit: #{changes}"
pp "previous_changes after commit: #{previous_changes}"
end