2010-11-30 14 views
5

Ciao a tutti, sto cercando un modo per aggiungere una strategia di invito alla mia app Rails. Sto usando Devise per l'autenticazione e mi piace l'aspetto di devise_invitable, ma per quanto posso dire, quel gioiello ti consente solo di invitare nuovi utenti al sistema.Invio di inviti a progetti in Rails

Nella mia app, un utente ha la possibilità di invitare altri utenti (tramite e-mail) a partecipare al suo progetto corrente. Se questo indirizzo e-mail esiste, l'utente viene aggiunto; se l'indirizzo non esiste, vorrei inviare un invito specifico per il progetto a quell'indirizzo email. Se l'utente ha già un account, può accedere e associare il proprio account a quel progetto. In caso contrario, può creare un nuovo account.

Qualcuno ha qualche consiglio su dove cercare un tale sistema?

risposta

9
# app/models/invite.rb 
class Invitation < ActiveRecord::Base 
    validates_uniqueness_of :email, :scope => :project_id 
    belongs_to :project 
    has_many :users 
    after_save :email_invite_if_no_user 

    private 
    def email_invite_if_no_user 
     unless User.find_by_email(email) 
     UserMailer.send_invite(self).deliver 
     end 
    end 
end 

# config/routes.rb 
resources :projects do 
    resources :invites 
end 

# app/controllers/invites_controller.rb 
class InvitesController < ActionController 
    before_filter :get_project 

    def new 
    # render invite form 
    end 

    def create 
    @invite = Invite.new(params[:invite]) 
    @invite.project_id = @project.id 
    if @invite.save 
     flash[:message] = "Successfully invited #{params[:invite][:email]}" 
     redirect_to @project 
    else 
     flash[:error] = "Could not invite #{params[:invite][:email]}" 
     render :new 
    end 
    end 

    private 
    def get_project 
     @project = Project.find(params[:project_id]) 
    end 
end 
+0

Decisamente un buon punto di partenza? Come gestiresti la parte che accetta l'invito? Controlla se c'è un invito con la stessa email su ogni accesso? o ogni pagina si aggiorna? – pastullo

+0

@pastullo Probabilmente creerò un metodo 'InvitationsController # accept' che autorizzerebbe l'utente corrente (se esiste l'invito e abbina la posta elettronica) ad accedere al progetto, tuttavia l'app vuole gestirlo (voce della tabella user_projects?). – Unixmonkey

+0

che ne dici: InvitesController # invita a verificare se l'utente è già registrato. Se lo è, crea un abbonamento per collegare utente e gruppo. Se non è ancora registrato, lascia un invito con la sua email e il gruppo in attesa. Una volta che l'e-mail si iscrive, con un filtro after_create, crei l'iscrizione? – pastullo

0

Ho implementato la funzionalità su una linea simile nella mia app. Forniremo solo una breve descrizione

Nella mia app seguiamo una funzionalità non completa e l'utente può invitare i suoi contatti da gmail, yahoo e facebook e digitando e-mail nell'area di testo.

Se email valido - nessuna casella di controllo per inviare invitare (messaggio email valido di fronte a quella e-mail)
Se e-mail valido e nessun utente già registrato utilizzando tale - casella di controllo Mostra di invitare
Se e-mail valido e registrato dall'utente - spettacolo segui il pulsante non completato

Ho usato contatti gem per recuperare i contatti da gmail e yahoo.

Il resto della codifica devi farlo da solo, non penso ci sia alcuna gemma disponibile per quello.

Problemi correlati