2012-06-18 18 views
9

Me gustaría saber qué campos se han actualizado después de una instrucción update_attributes. Estoy filtrando los parámetros actualizables y borrando aquellos que no quiero actualizados del params[:model]. Ahora, algunos de los nuevos parámetros actualizables pueden tener el mismo valor que el anterior y me gustaría saber qué parámetro se actualizó y cuál se omitió por el mismo valor. Aquí es una parte del código:¿Encontrar qué campos se han actualizado después de llamar a los atributos de actualización?

UPDATABLE_PARAMS = ["param1", "param2", "param3", "param4"] 
def update 
    @dr = DR.find(params[:id]) 
    authorize! :update, @dr #devise stuff 

    hnew = params[:dr] 
    hnew.delete_if {|k, v| !UPDATABLE_PARAMS.include?(k.to_s) } 

    if @dr.update_attributes(hnew) 
    @dr.update_attribute(:last_updated_by, current_user.email) 
    @dr.touch 
    end 

    render :update_result 
end 

Aquí está la parte difícil:

me gustaría representar el objeto @dr en JSON (pero que ya esté configurado) y además de sus campos estándar, I' Me gusta agregar un objeto anidado que contiene el updated_params. Podría simplemente enviar hnew como @hnew a mi vista, pero si lo hago obtendré todos los parámetros procesados, no solo los que fueron diferentes.

¿Cómo puedo obtener los parámetros modificados?

+0

La mejor práctica es manejar los parámetros asignados de masa permitidos a través de attr_accessible y utilizando: como opción para asignar atributos/atributos de actualización/nuevo. –

+0

gracias viktor. Estoy usando attr_accessible pero solo para nuevos registros. La actualización tiene diferentes atributos accesibles que dependen de otros factores (como un par de valores de campo de registro) – Oktav

Respuesta

36

Mapa de atributos que se cambiaron cuando se guardó el modelo.

@dr.previous_changes() 
+0

Esto es muy divertido. Sabía que debe haber un camino de railes para esto. Gracias. – Oktav

+0

correcto y bueno saber. Humildemente borro mi respuesta ... –

Cuestiones relacionadas