Actualmente estoy tratando de implementar un registro para la sección de administración de mi aplicación de rieles. Esto permitirá que un administrador vea qué acciones ha realizado un usuario y cuándo. E.g 'El usuario agregó una nueva dirección', 'El usuario actualizó su código postal de X a Y'.Mantener un registro de eventos de usuario en raíles
Como cada acción podría involucrar muchos modelos, no solo el usuario, he creado un modelo de registro que tiene campos para todos los ID de otros modelos de sistema, un mensaje y un código de registro.
class CreateLogs < ActiveRecord::Migration
def self.up
create_table :logs do |t|
t.integer :user_id
t.integer :marker_id
t.integer :administrator_id
t.integer :group_id
t.integer :assignment_id
t.integer :submission_id
t.integer :code
t.text :message
t.timestamps
end
end
def self.down
drop_table :logs
end
end
Mi preocupación es que, por ejemplo, un usuario podría (digamos) añadir una asignación a su cuenta, que se registra como
Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')
(En algún lugar del código 342 corresponde a 'Usuario creó una nueva dirección ', por lo tanto, no es necesario el mensaje)
Obviamente, en una vista de registro, puedo extraer la información de usuario y dirección relevante de los identificadores de log/detalles, pero si este usuario o dirección se eliminaran, toda esa información no estar disponible y, al mirar hacia atrás a través de los registros, la entrada sería básica y inútil
Tiene que haber una forma mejor o algo por el estilo para ayudar a registrar eventos del sistema como este y hacer frente a posibles eliminaciones.
Como alternativa, podría almacenar toda la entrada como un mensaje de texto, pero ¿no sería realmente malo y llenar la base de datos innecesariamente?
Avíseme si algo de eso no está claro, ¡simplemente se debe haber hecho antes las acciones/eventos de registro de aplicaciones!
Gracias,
Pete
Esto se ve prometedor, particularmente como el rastro del papel, pero solo puede guardar una sola versión/registro cuando se cambia un modelo ¿verdad? ¿Qué pasa si quiero especificar manualmente cada cambio individualmente? O si se realiza una acción que no necesariamente cambia un modelo pero hace algo más como enviar un correo electrónico? –
Sí, el control de versiones/auditoría generalmente solo se desencadena por cambios en el registro. Si necesita registrar acciones personalizadas que no necesariamente desencadenen un cambio en la base de datos, deberá crear su propio registrador. – eugen