Rails

2010-11-30 14 views
5

içinde Proje Davetleri Gönderme Hey, Rails uygulamasına bir davet stratejisi eklemenin bir yolunu arıyorum. Kimlik doğrulaması için Devise'yi kullanıyorum ve devise_invitable'un görünümünü beğendim, ancak söyleyebileceğim kadarıyla, bu taş yalnızca yeni kullanıcıları sisteme davet etmenize izin veriyor.Rails

Uygulamamda, bir kullanıcı mevcut projesine katılmak için diğer kullanıcıları (e-posta kullanarak) davet etme olanağına sahip. Bu e-posta adresi varsa, kullanıcı eklenir; adres mevcut değilse, bu e-posta adresine projeye özel bir davetiye göndermek istiyorum. Kullanıcının zaten bir hesabı varsa, hesabına giriş yapabilir ve hesabını bağlayabilir. Yoksa, yeni bir hesap oluşturabilir.

Böyle bir sistemi nerede arayacağınız konusunda herhangi bir tavsiyesi var mı?

cevap

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

Kesinlikle iyi bir başlangıç ​​noktası? Davet kabul bölümünü nasıl ele alırsın? Her girişte aynı e-postayla bir davetiye olup olmadığını kontrol edin. veya her sayfa yenilenir mi? – pastullo

+0

@pastullo Muhtemelen projeye erişmek için mevcut_kullanıcıyı (eğer varsa ve e-posta ile eşleşiyorsa) yetkilendirecek bir 'InvitationsController # accept' yöntemi yaratacağım, ancak uygulamanız bunu (user_projects tablo girişi?) Işlemek istiyor. – Unixmonkey

+0

ne hakkında: InvitesController # kullanıcı zaten kayıtlı olup olmadığını kontrol eder. Öyleyse, kullanıcı ve grubu bağlamak için bir üyelik oluşturur. Henüz kayıtlı değilse, e-postası ve bekleyen grubu bekleyen bir Davet gönderir. Bu e-posta bir sonraki filtreye sahip olduğunda, üyelik oluşturuyor musunuz? – pastullo

0

Uygulamamda benzer satırlarda işlevsellik uyguladık. Sadece bir kısa açıklama vereceğim

Uygulamamda aşağıdaki işlevleri takip etmekteyiz ve kullanıcı, kişilerini gmail, yahoo ve facebook'tan davet edebilir ve metin alanına e-posta yazabilir.

Eposta geçerli ise - hiçbir onay kutusu (bu e-posta önünde geçersiz e-posta mesajı) davet göndermek için
geçerli e-posta ve herhangi bir kullanıcı zaten kullanılarak kayıtlı ise -
eposta geçerli ve kayıtlı kullanıcı varsa davet etmek gösterisi onay kutusunu - gösterisi takip etmeyi bırakma düğmesine basın

Kişileri gmail ve yahoo'dan almak için kontakları kullandım.

Kendiniz yapmak zorunda olduğunuz kodlamanın geri kalanı, bunun için uygun bir mücevher olduğunu düşünmüyorum.