2013-08-05 7 views
3

고마워요.레일즈 4 다중 사용자 모델 개발 STI

Devise and Rails 4를 사용 중입니다. 4. 주 사용자 모델에서 상속받을 여러 사용자 모델 (admin, usertype1, usertype2)을 추가하고 싶습니다. 많은 게시물을 검색하여 CanCan을 사용할 수 있다는 결론에 도달했습니다. CanCan은 원하지 않는 CanCan을 사용하거나 Single Table Inheritance를 사용할 수 있습니다.

내가 보는 방법은 Devise로 만든 내 주 사용자 모델에 유형 문자열 열을 추가하는 것입니다. 다음과 같이 부모의 각 하위 클래스를 확장해야합니다.

class Admin < User 
end 

class Usertype1 < User 
end 

class Usertype2 < User 
end 

내 질문은 : 다음에해야 할 일은 무엇입니까? 유형 열에 액세스하는 방법을 정확히 어떻게 알 수 있습니까? 또한 current_user 도우미 메서드에 대한 Devise 컨트롤러를 재정의해야합니까 예 : current_admin?

다시 한번 감사드립니다.

답변

1

easy_roles gem을 사용할 수도 있습니다. github에서 사용할 수 있습니다. 이 보석은 다양한 사용자 역할을위한 비트 마스크 솔루션을 제공합니다. 하나의 모델 만 있으면됩니다 (예 : 사용자).이 모델은 속성 "역할"을 갖습니다. github에서 문서를 체크 아웃하면됩니다. Devise + easy_roles + CanCan은 매우 좋은 설정입니다. 제 의견으로는 매우 편리합니다. 나는 이것을 아주 자주 사용한다. GitHub의에

링크 : https://github.com/platform45/easy_roles

+0

감사합니다. 성공적으로 두 프로젝트를 모두 추가했는데 두 프로젝트가 모두 작동합니다. 이제 easy_roles가 사용자 모델에 새로운 열을 추가한다는 것을 이해합니다. 내가 이해하지 못하는 부분은 실제로 하위 클래스를 만드는 부분입니다. 그렇게합니까? –

+1

무엇을 의미합니까? STI 하위 클래스? 더 이상 필요하지 않을 것입니다. 다른 메소드를 정의하여 다른 사용자 역할을 얻을 수 있습니다. 예를 들어, def has_role? (role) 또는 이와 유사한 것을 정의하면 다른 역할이 반환됩니다. 또한 제공된 비트 마스크 솔루션을 통해 한 사용자에게 여러 역할을 추가 할 수 있습니다. – Mattherick

+0

해당 하위 클래스의 데이터는 어떻게됩니까? 저장 될 곳 또는 잠재적으로 어떻게 각 하위 클래스에 특정 열을 추가 할 수 있습니까? 다시 한 번 감사드립니다 –

3

나는이 정말 원래의 질문에 대한 대답 모르겠어요. Devise에 대해 여러 세션 컨트롤러를 설정하려고하는데 실제로이 사용 사례에 대해 여러 모델이 필요한 것처럼 보입니다. 제가 작업 버전을 가지고있을 때 다시 게시 할 것입니다.

0

STI는 current_admin, current_user1current_user2 Devise 메소드를 제공합니다.

application_controller.rb에서 current_user 방법을 다음과 같이 정의를 만듭니다

def current_user 
    if current_admin 
     current_admin 
    elsif current_user1 
     current_user1 
    else 
     current_user2 
    end 
    end 
helper_method :current_user 

당신은 routes.rb에 몇 가지 작업 및 사용자 지정 sessions_controller.rb가 필요합니다. 허용되는 답변보기 Rails: Using Devise with single table inheritance