2011-09-10 3 views
2

많은 회원 (User 모델)이있는 Group 모델이 있습니다.Ruby on Rails : 개발자 : "사용자를 모델에 속하도록 초대 하시겠습니까?"

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"와 같은 이름의 새 모델을 추가하십시오.

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 InvitedUser < ActiveRecord:Base 
    belongs_to :group 
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 액션을 구현해야합니다. 물론