2010-11-30 25 views
5

ちょっと、私はRailsアプリケーションに招待戦略を追加する方法を探しています。私は認証のためにDeviseを使用していますが、devise_invitableのように見えますが、私には分かりませんが、その宝石は新しいユーザーをシステムに招待することしかできません。プロジェクトをRailsに招待する

私のアプリでは、ユーザーは自分の現在のプロジェクトに参加するために他のユーザー(電子メールを使用して)を招待することができます。その電子メールアドレスが存在する場合、ユーザーが追加されます。アドレスが存在しない場合は、そのメールアドレスにプロジェクト固有の招待状を送信したいと思います。ユーザーが既にアカウントを持っている場合は、ログインしてアカウントをそのプロジェクトにバインドできます。そうでなければ、新しいアカウントを作成することができます。

誰もそのようなシステムを探すためのアドバイスはありますか?

答えて

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

確かにいい出発点ですか?招待受付部はどのように扱いますか? ログインごとに同じメールの招待状があるかどうか確認してください。またはすべてのページが更新されますか? – pastullo

+0

@pastullo私はおそらくあなたのアプリがその(user_projectsテーブルのエントリ?)を処理したいのですが、current_user(inviteが存在し、電子メールと一致する場合)にプロジェクトにアクセスする権限を与える 'InvitationsController#accept'メソッドを作成します。 – Unixmonkey

+0

about:InvitesController#inviteは、ユーザーが既に登録されているかどうかを確認します。彼がいる場合、ユーザーとグループをリンクするメンバーシップを作成します。彼がまだ登録されていない場合、彼は彼の電子メールとそれが保留中のグループとの招待を残す。その電子メールがサインアップされたら、after_createフィルタを使用して、メンバーシップを作成しますか? – pastullo

0

私のアプリで同様の行に機能を実装しました。

私のアプリではフォローアンドフォロー機能があり、ユーザーはGmail、Yahoo、Facebookから連絡先を招待し、テキストエリアにメールを入力することができます。

メール有効な場合 - ノーチェックボックスが(その電子メールの前に無効な電子メールメッセージ)招待を送信するために
有効な電子メールなしユーザーが既に使用して登録されている場合 -
メール有効と登録ユーザーの場合を招待するには、showチェックボックスを - ショーunfollow buttonに従います

私はgmailとyahooから連絡先を取得するために連絡先gemを使用しました。

あなた自身で行う必要があるコードの残りの部分は、私はそれに利用できる宝石はないと思います。

関連する問題