2011-06-30 12 views
5

Necesito un sistema en el que un usuario normal pueda editar un modelo, pero las ediciones en realidad no suceden hasta que sean aprobadas por un administrador. Encontré una gema llamada paper_trail que tiene versión de modelo pero no admite específicamente lo que quiero hacer. Me pregunto cómo otras personas han manejado este problema. Debo añadir que también hay asociaciones que me gustaría que el usuario pueda editar al mismo tiempo. No son muy complicados, por ejemplo, uno es alias.Cómo configurar la aprobación del administrador ediciones de un modelo

La parte más complicada tal vez sea el caso donde varios usuarios editan el mismo modelo y tratan de hacer algún tipo de fusión.

+1

¿Alguna vez ha encontrado una solución? – ZMorek

Respuesta

1

Un enfoque sería hacer versiones con la aprobación de la versión.

Cada edición crea una nueva versión del objeto modelo y sus asociaciones. En cualquier momento, solo hay una versión "actual" de cualquier objeto modelo (y su representación en la base de datos).

Si dos usuarios envían dos ediciones separadas, estas crearían dos versiones "pendientes".

Un administrador aprobaría ediciones moviendo la versión actual a la nueva versión "pendiente". Las fusiones también podrían lograrse, pero eso podría ser muy específico del dominio, y podría generar conflictos, por lo que mantener versiones separadas sería inteligente de todos modos.

Hay algunas maneras de lograr esto, y lo mejor dependerá de la dinámica de la situación.

Recomiendo ver cómo funciona Git e intentar modelar su sistema después de eso. Una especie de puntero a su objeto modelo HEAD con un historial de revisión y la capacidad de mover HEAD a diferentes revisiones. La fusión también podría funcionar de manera similar a Git.

Espero que ayude.

+0

No creo que crear otras versiones de los modelos sea el camino a seguir, ya que vas a contaminar la base de datos con otras versiones. De hecho, estoy pensando que tiene que haber una forma de modificar paper_trail para hacer esto. Como crear una nueva versión pero no actualizar el objeto actual. – hadees

+0

bueno, puedes limpiar versiones antiguas con un cron o bajo aprobación, pero es esencialmente el mismo problema. Crea nuevas versiones, luego borra las que ya no le importan. –

0

Estoy viendo este mismo problema, es decir, la aprobación de las revisiones, puedo encontrar this, sospecho que puede hacer algo similar con paper_trail.

Cuestiones relacionadas