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?
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. –
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