2010-11-30 6 views
5

Hej wszystkim, szukam sposobu na dodanie strategii zaproszeń do mojej aplikacji Rails. Używam Devise do uwierzytelniania, i jak wyglądam na devise_invitable, ale o ile mogę powiedzieć, że klejnot pozwala tylko zaprosić nowych użytkowników do systemu.Wysyłanie zaproszeń do projektu w Railsach

W mojej aplikacji użytkownik ma możliwość zapraszania innych użytkowników (za pomocą poczty e-mail) do dołączenia do bieżącego projektu. Jeśli ten adres e-mail istnieje, użytkownik jest dodawany; jeśli adres nie istnieje, chciałbym wysłać zaproszenie do tego adresu e-mail dotyczące konkretnego projektu. Jeśli użytkownik ma już konto, może się zalogować i powiązać swoje konto z tym projektem. Jeśli nie, może utworzyć nowe konto.

Czy ktoś ma jakieś porady dotyczące tego, gdzie szukać takiego systemu?

Odpowiedz

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

Zdecydowanie dobry punkt wyjścia? Jak poradzisz sobie z przyjęciem zaproszenia? Sprawdź, czy przy każdym logowaniu jest zaproszenie z tym samym adresem e-mail? lub odświeżanie każdej strony? – pastullo

+0

@pastullo Prawdopodobnie utworzyłbym metodę 'InvitationsController # accept', która autoryzowałaby bieżącego_użytkownika (jeśli zaproszenie istnieje i dopasowuje pocztę elektroniczną), aby uzyskać dostęp do projektu, ale twoja aplikacja chce to obsłużyć (pozycja w tablicy user_projects). – Unixmonkey

+0

co powiesz na: InvitesController # zaprosić czeki, jeśli użytkownik jest już zarejestrowany. Jeśli tak, tworzy członkostwo, aby połączyć użytkownika i grupę. Jeśli nie jest jeszcze zarejestrowany, zostawia zapraszającego ze swoim e-mailem i grupą oczekującą na rozpatrzenie. Po utworzeniu tego e-maila z filtrem after_create tworzysz członkostwo? – pastullo

0

Zaimplementowałam funkcjonalność na podobnej linii w mojej aplikacji. Podam tylko krótki opis:

W mojej aplikacji mamy funkcję follow-unfollow i użytkownik może zaprosić swoje kontakty z Gmaila, Yahoo i Facebooka oraz wpisując e-maile w polu tekstowym.

Jeśli Email ważne - nie ma wyboru, aby wysłać zaproszenia (nieprawidłowy wiadomość e-mail z przodu tej wiadomości)
Jeśli e-mail ważne i żaden użytkownik już zarejestrowany przy użyciu tego - Pokaż pole wyboru, aby zaprosić
If email ważne i zarejestrowany użytkownik - pokaż postępuj zgodnie z przyciskiem anuluj wypełnianie

Użyłem gem kontaktu, aby pobrać kontakty z Gmaila i Yahoo.

Resztę kodowania trzeba zrobić samemu, nie sądzę, że jest na to jakiś klejnot.