2014-05-14 4 views
0

Je conçois une application de gestion de projet et je souhaite que mes utilisateurs puissent «bifurquer» un projet existant dans la base de données. Par exemple, @user1 va créer un projet et @user2 peut vouloir modifier ce projet, donc @user2 va cliquer sur une option à 'fork' il.
Lorsque cela se produit, le projet existant sera à peu près dupliqué pour @user2, sauf qu'il/elle sera en mesure de modifier le contenu de celui-ci. Je pensais que les attributs imbriqués pourraient faire l'affaire, mais je ne pense pas que ce soit la bonne méthode pour y arriver.Autoriser les utilisateurs existants à 'bifurquer' un projet dans un outil de gestion de projet

Des suggestions?

+0

Voulez-vous dire que vous voulez que l'utilisateur2 ait une copie distincte et indépendante? (Alors "fork" est juste un moyen de commencer rapidement basé sur le projet de quelqu'un d'autre.) Ou voulez-vous que user2 voit cela comme son propre projet, mais les changements par un utilisateur seront vus par tous? – awendt

Répondre

0

Vous devez utiliser la méthode ActiveRecord::Core#dup.
De la page:

objets dupés ont pas id attribué et sont traités comme de nouveaux records. Notez qu'il s'agit d'une copie "superficielle" car elle ne copie que les attributs de l'objet, et non ses associations. L'étendue d'une copie «profonde» est spécifique à l'application et est donc laissée à l'application pour être implémentée en fonction de ses besoins. La méthode dup ne conserve pas les horodatages (créés | mis à jour) _ (at | on).

En bref, @project.dup va construire un nouvel objet Project avec tous les mêmes paramètres que @project sauf - id, created_at, updated_at champs. @user2 peut faire une modification sur cet objet nouvellement construit, puis save il. Cela imite la fonctionnalité fork.

Questions connexes