2012-03-04 2 views
4

이 질문은 많은 시간을 요구했지만 내 질문은 조금씩 나아 간다.레일스 다형성 사용자 모델

내 응용 프로그램을 모델링 할 때 사용자 모델에 다형성 연관이있는 두 가지 유형의 사용자가 있습니다. 예를 들면 : User_Type_1 4 개 필드와 User_Type_2 같은 20 개 필드 같은 것을 가지고 있고 나는 사용자 테이블이 많은 필드를 갖고 싶어하지 않았기 때문에

class User < ActiveRecord::Base 
    belongs_to :profileable, :polymorphic => true 
end 

class User_Type_1 < ActiveRecord::Base 
    has_one :user, :as => :profileable 
end 

class User_Type_2 < ActiveRecord::Base 
    has_one :user, :as => :profileable 
end 

내가 이런 짓을하는 이유, 대신 STI의입니다 (예 24-ish 필드는 많이는 아니지만 대부분 20 ~ 20 개의 필드가 비어 있지는 않습니다.)

이 기능의 작동 방식을 이해합니다. 제 질문은 User_Type_1 유형의 사용자는 가입 할 수 있지만 둘 다 사용할 로그인 양식은 가입하십시오. 어떻게 든에서 기호 사이트의 오른쪽 부분에 리디렉션 내가 AppicationControllerafter_sign_in_path_for(resource) 재정을 사용할 수 있습니다 알고

을 (내가 User_Type_2의 사용자를 생성 할 응용 프로그램의 관리 측면이있을 것이다)처럼 뭔가 :.

def after_sign_in_path_for(resource) 
    case current_user.profileable_type 
    when "user_type_1" 
     return user_type_1_index_path 
    when "user_type_2" 
     return user_type_1_index_path 
    end 
end 

제 궁금한 점은 Devise를 사용하여 양식을 만들고 User_Type_1 유형의 가입 만 허용 한 다음 sign_up 이후에 서명하는 방법입니다.

또한 잘못된 길로 가고 있다면 올바른 길은 무엇입니까?

답변

5

나는 내 자신의 질문에 답할 수 있었고, 아마도 같은 문제를 가진 다른 사람을 도울 수 있도록 여기에 넣을 수있었습니다.

로그인 문제가 쉬웠다 단지

상기 한 바와 같이 기본 유증 로그인 및 ApplicationController에서 after_sign_in_path_for을 사용하여 여기 그것을 입력으로 양식 질문에 대한 답을 실현 :

난 그냥 만들어 중첩 된 속성으로 User_Type_1 정상 형태 User 과는 UserType1Controller 에 게시했다가 다음 ,369을 고안

에서 sign_in_and_redirect 도우미를 두 개체를 저장 및 호출
class UserType1Controller < ApplicationController 
    ... 
    def create 
     @user = User.new(params[:user]) 
     @user_type_1 = UserType1.new(params[:patron]) 
     @user.profileable = @user_type_1 
     @user_type_1.save 
     @user.save 
     sign_in_and_redirect @user 
    end 
    ... 
end 

그런 다음 위의 after_sign_in_path_for 방법을 올바른 위치로 전송했는데 모두 좋았습니다.

관련 문제