2014-05-11 2 views
0

내가 가진 사용자가 두 가지 종류가있는 레일 애플 리케이션 :Rails4 및 고안 : 최대 서명하는 것을에서 두 가지 역할을 차별화, 하나, 두 번째를 확인하지

역할 '선장'수신 선장, (양식 A를 통해) 등록하고 이메일을 통해 확인해야 함

팀장 인은 캡틴 (양식 B)이 작성하고 팀 관리 역할을받으며 확인 이메일을받지 못합니다. 지금 앱에 로그인하십시오.

class User < ActiveRecord::Base 
    before_create :assign_default_role 

    def assign_default_role 
    self.role = captain 
    end 

의미가 있습니다 :

모두 내가 가입이 때 선장 역할을 할당 이런 짓을 다른 역할 (User.role)

와 사용자 모델에 있습니다. 이제 '팀원'역할을 지정하고 활성화 프로세스를 건너 뛰기 위해 Teammate에 대해 동일한 작업을 구성하려고합니다.

Devits를 사용하면 skip_confirmation_notification을 사용할 수 있습니다.before_create 캡틴 사용자 및 팀원 사용자를 어떻게 구분할 수 있습니까?

그들은 같은 모델이 모든 것이 "역할"& 나중에 "confirmed_at"열을 제외하고 데이터베이스에서 동일하기 때문에.

숨겨진 필드? Teacate 폼에서 hidden_field "confirmation"값을 false로 설정하려고 시도했지만 가장 좋은 방법인지 잘 모르겠습니다. 사용자 모델 내에 확인 행이 없으므로 전달 방법을 모르겠습니다. before_create 액션.

<%= f.hidden_field :confirmation, options = {value: false} %> 

CREATE_TEAMMATE 방법? 사용자 컨트롤러 내부의 보조 작성 방법이지만 소리가 덜 들립니다.

누군가가 브라우저에서 편집 할 수 있기 때문에 보안되지 않은 숨겨진 필드로 '확인'을 사용하는 모든

self.skip_confirmation_notification! 

답변

0

주셔서 대단히 감사합니다 및 사용자가있다 곳에 당신은 일관성없는 상태로 끝낼 수 팀원 역할을 수행하고 확인 전자 메일을 받았습니다. 이것은 당신이 원하는 것이 아닌 것 같습니다.

사용자가 선장 또는 팀원이 될지 여부를 자유롭게 선택할 수있는 경우에만 어떤 역할을 만들지를 나타내는 숨김 필드를 추가 할 수 있습니다. before_create 콜백에서 미리 정의 된 값 (이 경우 == 'captain'또는 == 'teammate')에 대해 params['role']의 내용을 확인하고 적절한 조치를 취하십시오.

그러나 팀원 사용자가 선장으로 만 만들 수 있다면 앞에서 설명한 방법을 사용해야하지만 current_user.role == 'captain'이 팀원을 생성하기 전에 확인해야합니다.

+0

대단히 고마워요! 나는 숨겨진 필드보다 더 나은 방법을 찾고 있지만 지금은 파악할 수 없습니다 ... 기본적으로 가입 (홈 폼)하는 각 사용자는 기본적으로 캡틴 (상자에 틱하지 않음)입니다. 팀에 추가하는 사람들은 기본적으로 동료 (상자 없음) (2 차 양식)입니다. 동일한 모델에서 팀원은 가입을 통해 Captain이 될 수 있기 때문입니다. 팀장을 생성하기 위해 선장을 기록해야한다는 사실을 강조 했으므로 팀원이 선장에게 업데이트하기 전에 기록 할 수 없습니다. 그래서 current_user.try로 필터링 할 수 있습니다. – Patient55

0

비슷한 케이스가 있는데, 등록시 내 앱 사용자는 프리랜서 계정이나 대행사 계정을 만들도록 선택합니다.내 자신의 등록 컨트롤러를 만들면 간단히 해결할 수 있습니다.

class RegistrationsController < Devise::RegistrationsController 

    before_action :set_account_type 

    def create 
    @user = User.new user_params 

    if @account_type == 'captain' 
     # Do some stuff related to captain account 
     @user.role = 'captain' 

    elsif @account_type == 'teammate' 
     # Do some stuff related to teammate account 
     @user.role = 'teammate' 
     @user.skip_confirmation_notification! 

    end 

    if @user.save 
     redirect_to user_registered_path 
    else 
     render :new 
    end 
    end 

private 

    def set_account_type 
    # We ensure that the account_type coming from the registration form is valid 
    raise 'Error message OR for validation error' unless %w[captain teammate].include? params[:account_type] 
    @account_type = params[:account_type] 
    end 
end 

이렇게 라우트를 설정하는 방법을 알고 계십니까?

희망 하시겠습니까?

+0

이 설명에 감사드립니다. 중요한 것은 내 사용자가 자신의 사용자 유형을 선택하지 않는다는 것입니다. 캡틴이 팀 구성을 위해 앱을 사용하도록 선택하여 기본적으로 캡틴이 지정되도록합니다 (자택 등록 양식). 팀원을 팀에 추가 할 때, 그것들은 기본적으로 팀 동료에게 배정됩니다. 나중에, 아마 원하면 캡틴이 될 것입니다. 그래서 숨겨진 필드가 아닌 다른 계정 유형을 감지하는 방법을 모르겠습니다. 고맙습니다! – Patient55