2011-07-01 6 views
5

dado un modelo como:Rails, en el modelo, ¿hay alguna forma de proporcionar un dif a partir de la última actualización?

class SentenceItem < ActiveRecord::Base 

    after_update :send_changes 

    def send_changes 
    #### Is it possible to do a diff here with dirty/changed? Showing what's changed since the last save? 
    end 

end 

Y que el modle frase tiene un campo de texto.

¿Es posible hacer una diferencia aquí con sucio/cambiado? Mostrando lo que ha cambiado desde el último guardado?

Gracias

Respuesta

6

Sí, hay una manera. Desde el ActiveModel::Dirty documentación:

Un objeto recién instanciado es invariable:

person = Person.find_by_name('Uncle Bob') 
person.changed?  # => false 

Cambiar el nombre:

person.name = 'Bob' 
person.changed?  # => true 
person.name_changed? # => true 
person.name_was  # => 'Uncle Bob' 
person.name_change # => ['Uncle Bob', 'Bob'] 
person.name = 'Bill' 
person.name_change # => ['Uncle Bob', 'Bill'] 

los atributos que han cambiado?

person.name = 'Bob' 
person.changed  # => ['name'] 
person.changes  # => { 'name' => ['Bill', 'Bob'] } 
+0

Gran respuesta, visión muy completa y directa del módulo 'Dirty'. –

Cuestiones relacionadas