2012-05-31 2 views
0

역할 속성에 따라 관리자를 재 라우팅하는 삽입 광고 컨트롤러 작업이 있습니다. 역할 유형에 따라 관리자는 동일한 컨트롤러의 4 가지 작업 중 하나 (또는 ​​catch 작업) 중 하나로 이동합니다. 각각의 경우 각각의 작업에는 단일보기 만 있기 때문에 정상적으로 작동합니다. 하지만 뷰를 10 개의 다른 페이지로 나누고 싶습니다. 컨트롤러를 구성하는 방법을 잘 모르겠습니다.컨트롤러 재구성

각 컨트롤러가 서로 다른 컨트롤러로 나뉘어져 있고 정보가 다를 경우 4 가지 사례가 동일한 10 가지 동작을 가지므로 역할에 따라 정보량이 달라지며 변수가 약간 다를 수 있습니다.

각 컨트롤러를 자체 컨트롤러로 이동하고 대시 보드 # 색인을 사용하여 경로를 지정해야합니까? 자신의 하위 폴더에 4 대시 보드 컨트롤러를 추가하려면 rails g controller dashboard/free 등을 실행해야합니까, 아니면 구조적으로 처리하는 더 현명한 방법이 있습니까?

당신이 말한 것처럼 rails g controller dashboard/free 등을 사용하여 리디렉션

def index 
    path = case current_admin.role 
    when 'free' 
     dashboard_free_path 
    when 'standard' 
     dashboard_standard_path 
    when 'premium' 
     dashboard_premium_path 
    when 'super' 
     dashboard_super_path 
    else 
     no_access_path 
    end 
    redirect_to path 
end 

답변

1

내가 별도의 컨트롤러를 생성 할을하고 경로

match "/dashboard/index" => 'dashboard#index' 
match "/dashboard/free" => 'dashboard#free', :as => :dashboard_free 
match "/dashboard/standard" => 'dashboard#standard', :as => :dashboard_standard 
match "/dashboard/premium" => 'dashboard#premium', :as => :dashboard_premium 
match "/dashboard/super" => 'dashboard#super', :as => :dashboard_super 

대시 보드 컨트롤러하지만,이 사람들의 각각의 대신에와 ApplicationController 당신의 DashboardController에서 상속합니다. 그렇게하면 액션 중 하나라도 완전히 동일하면 DashboardController에서 정의 할 수 있습니다. 또는 공통 코드를 입력하여 공유 할 수 있습니다. 그것이 무엇인지에 따라 공유 코드를 도우미, 모델 또는 심지어 lib/DashboardController에 포함 된 사용자 정의 모듈에 두는 것이 좋습니다.

보기에서 부분을 많이 사용하여 일반적인보기 코드도 공유 할 수 있습니다.