2012-11-06 2 views
6

나는 devise 사용자 모델을 만들었습니다.Devise가 사용자 유형별로 다른 루트 경로를 설정했습니다.

  • 고객
  • 관리자 나는이 '정상'모델 생성 bij 이룬

: 고객 및 관리자에게 사용자의 2 종류가 있습니다. 이 두 모델과 같이, 사용자 모델에서 상속됩니다

class Customer < User 

사람이 알고 있나요 어떻게 설정 사용자의 유형별 루트 경로를 할 수 있습니다. 나는 이런 식으로 뭔가를 원하는 :

authenticated :customer do 
    root :to => "customer/dashboard#index" 
end 

authenticated :admin do 
    root :to => "admin/dashboard#index" 
end  

UPDATE :

root :to => "pages#home", :constraints => lambda { |request|!request.env['warden'].user} 
root :to => 'customer/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'customer' } 
root :to => 'admin/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'admin' } 
+0

업데이트 된 답변을 질문과 대답 대신 이동하십시오. – Noz

+0

처음 8 시간 동안 내 질문에 답할 수 없습니다 ... –

답변

2

당신이 할 수있는 것은 하나의 루트 경로를 가지고있다가, home#index 및 대응에 말 : 나는 문제를 해결했습니다

컨트롤러 동작은 사용자 유형에 따라 리디렉션을 수행합니다. 예를 들어

: 오래된 질문이지만

def index 
    if signed_in? 
    if current_user.is_a_customer? 
     #redirect to customer root 
    elsif current_user.is_a_admin? 
     #redirect to admin root 
    end 
    end 
end 
+0

답장을 보내 주셔서 감사합니다. 1 접근 방식에 문제가 있습니다. 고객 루트 및 관리 루트는 domain.com/에 있지 않습니다. 이 경우 domain/customer 및 domain.com/admin –

+0

이 될 것이므로이 두 가지 조건 (is_a_customer? 및 is_a_admin?)을 루트 방법 (두 가지 유형의 사용자 모두에 대해 고소해야하는 일반적인 방법) 그리고 로그인 된 사용자 당 레코드를 가져 오기 – Prem

5

는 아무 대답이 없다 그것은 다른 사람을 위해 유용 할 수있다. 레일 3.2에서

(I 낮은 아무것도 그것을 테스트 적이없는) 그런 다음 더 아래 일반 루트 경로가 당신의 routes.rb 파일

authenticated :admin_user do 
    root :to => "admin_main#index" 
end 

에서이 작업을 수행 할 수 있습니다.

그러나이 방법은 레일스 4에서 Invalid route name, already in use: 'root' (ArgumentError)을 제공하는 것으로 보이지 않습니다. (이 질문을 보았을 때 방금 찾은 솔루션을 찾고 있었기 때문에) 레일 4 내가 내 대답

편집을 업데이트합니다 :

좋아 레일 4 수정이 박쥐 너무 명백한 권리는 아주 간단하지만 그래서. 같은 : 당신이 할 필요가로를 추가하여 두 번째 루트 경로를 명명 된 경로를 만들 것입니다

authenticated :admin_user do 
    root :to => "admin_main#index", as: :admin_root 
end 

here를 기록하지만 단지 임시 수정처럼 보인다주의하고, 그래서 다시 변경 될 수 있습니다 앞으로

+0

은 더 이상 레일 5에서 작동하지 않습니다. – wegginho

0

after_sign_in_path_for을 사용하는 것이 적절해야합니다. 그러므로 application_controller.rb에 다음을 추가하십시오.

def after_sign_in_path_for(resource) 
    if resource.type == 'customer' 
    your_desired_customer_path 
    else 
    your_desired_admin_path 
    end 
end 
관련 문제