Para un proyecto en el que estoy trabajando actualmente, necesito implementar el control de versiones de objetos. Lamentablemente, necesito mantener un historial completo de cada objeto, por lo que una sola solución de tabla como Papertrail se volvería rápidamente inmanejable. Sin embargo, hay características de Papertrail que me gustan, que no he podido encontrar en una solución con tablas individuales para cada modelo (como act_as_versioned).Control de versiones de objetos en Rails, como Papertrail pero tablas individuales
- Capacidad para almacenar meta-información tanto de controlador y el modelo
- datos es serializado por lo que los cambios de esquema no modifican la tabla de versiones
- métodos de gran alcance para las versiones que atraviesan
- seguimiento automático de cambio de responsabilidad
también hay algunas características que no tiene Papertrail que sería bonificaciones:
- El soporte integrado versión diff
- diferencial en lugar de versiones completas
Estoy considerando actualmente se bifurcan Papertrail utilizar tablas individuales para cada modelo, pero me gustaría guardar ese esfuerzo si hay una solución existente .
Actualización: Vestal versiones por defecto usa una sola tabla, pero proporcionando una clase versión personalizada para cada modelo y utilizando el método "set_table_name" de ActiveRecord, yo era capaz de crear tablas separadas para cada modelo. Vestal Versions también ha incorporado compatibilidad con diff, aunque su interfaz no es tan poderosa como Papertrails. También carece de soporte de asociación.
Actualización 2: Como PaperTrail parece ser un proyecto más activo que he bifurcadas la gema y se añaden en apoyo de la clase personalizada similar a Vestal versiones que ahora permite la posibilidad de definir tablas separadas por modelo. Mi fork está aquí, pero espero que en breve se ingrese al repositorio principal del proyecto. https://github.com/benzittlau/paper_trail
¿Por qué exactamente necesita una tabla por modelo? El plugin old-school acts_as_versioned funciona de esta manera. – Unixmonkey
Se requiere una tabla separada para cada modelo ya que una sola tabla para todos los objetos versionados crecerá rápidamente a un tamaño no manejable, especialmente porque espero que esta tabla se lea y se escriba con frecuencia. –