2010-02-26 18 views
5

Digamos que tenía una aplicación que era una libreta de direcciones. Me gustaría tener una página dedicada a un "tablero de instrumentos". En esta página, me gustaría tener una lista actualizada de los eventos que suceden dentro de la aplicación.Creando un panel en Rails

ejemplos de eventos pueden ser:

  1. un usuario agrega un contacto.
  2. Un usuario elimina un contacto.
  3. Un usuario actualiza un contacto.

¿Cuál sería la mejor manera de crear este tipo de funcionalidad? Originalmente, sentí que podía hacer algunas llamadas a bases de datos creativas con datos existentes, pero no podría tratar con eventos que borraron datos, como cuando se elimina un contacto.

Así que ahora estoy pensando que tendría que ser una tabla separada que simplemente almacenara los eventos mientras ocurrían. ¿Sería así como la mayoría de los sitios logran esto?

Podría ir a lo largo de mi aplicación, y cada vez que se realiza una operación CRUD podría crear un nuevo elemento en la tabla que detalla lo que sucedió, pero que no parece muy seco.

Supongo que mi pregunta sería: ¿cuál es la mejor manera de crear la funcionalidad del tablero dentro de una aplicación ya existente como una libreta de direcciones?

Cualquier orientación sería muy apreciada.

Respuesta

6

La forma más fácil de hacerlo es con el usuario Observers además de una tabla de "registrador" en su base de datos.

Logger 
    id 
    model_name 
    model_id 
    message 

esta manera se puede establecer un observador de todos los modelos que desea conectarse, y hacer algo como esto:

after_delete(contact) 
    Logger.create({:model_name => contact.class.to_s, 
       :model_id => contact.id, 
       :message => "Contact was deleted at #{Time.now}"}) 
end 

Ahora puede registrar cualquier evento de una manera que considere conveniente. Otra gran adición a este tipo de estructura es implementar "Eliminaciones lógicas", lo que significa que nunca realmente borran un registro de la tabla, usted simplemente le da una bandera para que ya no se muestre en los conjuntos de resultados regulares. Hay un complemento que hace esto llamado acts_as_paranoid.

Si implementa las dos cosas anteriores, el tablero puede registrar todas las acciones importantes, y si alguna vez necesita ver qué sucedió o ver los datos de esos eventos, todo está en el sistema y se puede acceder a través de la consola (o controladores, si los configura).

1

Puede usar Observers para manejar los eventos.

Luego solo almacene el evento con la información necesaria en la base de datos de esos observadores.

Aquí está un quick link para comenzar.

1

He creado una funcionalidad similar en el pasado usando acts_as_audited.

Esto le ayuda a rastrear los cambios en sus modelos, que luego puede presentar al usuario.

Básicamente solo hace un seguimiento de los eventos en una tabla separada, como sugirió.

2

Es posible que desee echa un vistazo a la línea de tiempo Fu: http://github.com/jamesgolick/timeline_fu:

class Post < ActiveRecord::Base 
    belongs_to :author, :class_name => 'Person' 
    fires :new_post, :on => :create, 
       :actor => :author 
end 
0

usuario paper_trail plug-in, que es impresionante !. Sin embargo, lo modificamos, se usa para todo nuestro sistema de auditoría para el complicado proceso de publicación.