2016-09-15 4 views
1

Je construis une application rails qui a des projets auxquels les utilisateurs (manipulés par Devise) peuvent être invités en tant que collaborateurs (un peu comme les dépôts et collaborateurs GitHub). J'ai du mal à faire fonctionner les invitations (en supprimant spécifiquement les collaborateurs). J'ai suivi this tutorial pour lancer la création d'invitations mais le tutoriel ne couvre pas la révocation des invitations (suppression des collaborateurs). J'ai un fichier projects_controller.rb et un fichier invites_controller.rb. Le contrôleur invite gère la création de nouvelles invitations, ce qui fonctionne bien (si un utilisateur existe déjà, elles sont immédiatement ajoutées à un projet, si un utilisateur n'existe pas, une invitation est envoyée à l'adresse e-mail saisie).Inviter et supprimer des collaborateurs vers/depuis le projet - Rails

Comment devrais-je ajouter des fonctionnalités pour supprimer des collaborateurs? Pour moi, il serait logique d'utiliser un invites#destroy (étant donné que les invitations sont créées dans ce contrôleur), mais simplement, supprimer une invitation ne révoquera pas l'autorisation de l'utilisateur à un projet. Et qu'en est-il des utilisateurs qui créent un projet initialement, ils n'auront aucune invitation du tout.

Est-ce que quelqu'un sait quel chemin je devrais prendre ici? Dites-moi si d'autres informations seraient utiles.

Merci

Répondre

1

En supposant que vous gérez des collaborateurs à un projet avec une association has_many:

class Project < ApplicationRecord 
    has_many :users 
end 

vous pouvez ensuite mettre en œuvre invites#destroy pour supprimer un utilisateur de la liste des collaborateurs:

class InvitesController < ApplicationController 
    def destroy 
    @project = Project.find params[:project_id] 
    @user = User.find params[:user_to_remove] 
    @project.users.delete(@user) 
    # Add whatever renders or redirects you need to here 
    end 
end 

Votre vue pouvez utiliser ce bouton pour supprimer un collaborateur:

# Make sure @project (the project to remove from) and @user (the user to remove) are defined and non-nil 
<%= link_to "Remove Collaborator", url_for(:controller => :invites, :action => :destroy, :project_id => @project.id, :user_to_remove => @user.id), :method => :delete %> 
0

Utilisez le gem 'devise_invitable' pour les invitations de manutention. https://github.com/scambra/devise_invitable

+0

Salut, Merci pour votre réponse. Corrigez-moi si je me trompe, mais si je comprends bien, devise_invitable est idéal pour les invitations à l'échelle de l'application (par exemple: inscription pour l'application via la référence), mais ne vous donne pas beaucoup pour les invitations scoped .. – slehmann36

+0

étendues, vous pouvez le remplacer selon votre logique métier –