2011-06-30 1 views
5

J'ai besoin d'un système sur lequel un utilisateur ordinaire peut modifier un modèle, mais les modifications ne sont pas effectuées tant qu'elles ne sont pas approuvées par un administrateur. J'ai trouvé une gemme appelée paper_trail qui avait des versions de modèles mais ne supporte pas spécifiquement ce que je veux faire. Je me demande comment d'autres personnes ont géré ce problème. Je devrais ajouter qu'il y a aussi des associations que je voudrais pouvoir éditer en même temps. Ils ne sont pas très compliqués, par exemple un alias.Comment configurer l'approbation d'administration les modifications d'un modèle

La partie la plus compliquée peut-être être le cas où plusieurs utilisateurs éditent le même modèle et essaient de faire une sorte de fusion.

+1

jamais trouver une solution? – ZMorek

Répondre

1

Une approche serait de faire des versions avec approbation de version. Chaque modification crée une nouvelle version de l'objet modèle et de ses associations. À tout moment, il n'y a qu'une seule version "actuelle" d'un objet modèle (et sa représentation dans la base de données).

Si deux utilisateurs soumettent deux modifications distinctes, celles-ci créeraient deux versions "en attente".

Un administrateur approuverait les modifications en déplaçant la version actuelle vers la nouvelle version «en attente». Les fusions pourraient être accomplies aussi, mais cela pourrait être très spécifique au domaine, et pourrait entraîner des conflits, alors garder des versions séparées serait intelligent de toute façon.

Il existe plusieurs façons d'y parvenir, et la meilleure dépend de la dynamique de la situation.

Je vous recommande de regarder comment fonctionne Git et d'essayer de modéliser votre système par la suite. Une sorte de pointeur vers votre objet modèle HEAD avec un historique des révisions et la possibilité de déplacer HEAD vers différentes révisions. La fusion pourrait également fonctionner de manière similaire à Git.

Espérons que ça aide.

+0

Je ne pense pas que créer d'autres versions des modèles est la voie à suivre puisque vous allez polluer la base de données avec d'autres versions. Je pense réellement qu'il doit y avoir un moyen de modifier paper_trail pour ce faire. Comme créer une nouvelle version mais ne pas mettre à jour l'objet courant. – hadees

+0

Eh bien, vous pouvez nettoyer les anciennes versions avec un cron ou sur approbation, mais c'est essentiellement le même problème. Vous créez de nouvelles versions, puis supprimez celles dont vous ne vous souciez plus. –

0

Je regarde ce même problème en ce qui concerne l'approbation des révisions, je peux rencontrer this, je suppose que vous pouvez faire quelque chose de similaire avec paper_trail.

Questions connexes