2011-09-10 16 views
2

多くのメンバー(Userモデル)を持つGroupモデルがあります。Ruby on Rails:Devise:「ユーザーをモデルに所属させる」を追加するには?

class Group < ActiveRecord::Base 
    belongs_to :owner, :class_name => 'User' 
    has_many :members, :through => :group_members, :class_name => 'User' 
end 

UserモデルはDeviseを使用しています。私は、ユーザー(グループオーナー)がグループに所属する別のユーザー(まだユーザーレコードを持っていてもいなくてもよい)を "招待"する能力を追加する必要があります。これを行うにはどうしたらいいですか?このようなものは既に作られ、宝石として梱包されていますか?

答えて

3

まず、ユーザーを見つけて、彼が存在するグループに追加することです。彼が存在しない場合は、電子メールで招待状を送信し、その招待状をグループに属している別のテーブルに入れてください。 その後、同じ電子メールアドレスを持つ人がサインアップした場合は、新しいユーザーをグループに直接入れてください。合計:電子メールアドレス行のみを持ち、グループモデルに属する「invited_user」という名前の新しいモデルを追加します。

class InvitedUser < ActiveRecord:Base 
    belongs_to :group 
end 

このような招待アクションを作成します。

def invite_user 
    user = User.find_by_email(params[:email]) 
    group = Group.find(params[:id]) 
    if user 
    group.users << user 
    else 
    send_invite user.email 
    group.invited_users << user 
    end 
end 

そして最後に、あなたが工夫の登録コントローラーをサブクラス化する必要があるので、あなたは無効にすることができます/成功サインアップした後、デフォルトのアクションに追加します。

class RegistrationsController < Devise::RegistrationsController 

    protected 

    def def after_sign_up_path_for(resource) 
    invited_user = InvitedUser.find_by_email(resource.email) 
    if invited_user 
     invited_user.group.users << resource 
     invited_user.destroy 
    end 
    after_sign_in_path_for(resource) 
    end 
end 

またはそのような何か:私は、部分的工夫のマニュアルに頼ることだし、それを自分自身試していなかったので、この部分は信頼できないかもしれません。もちろんsend_inviteアクションを実装する必要があります。もちろん

関連する問題