2012-05-31 3 views
0

У меня есть действие межстраничного контроллера, которое перенаправляет администраторов на основе их атрибутов роли. В зависимости от типов ролей админы будут направлены на одно из 4 действий в одном контроллере (или на действие catch). Это прекрасно работает, потому что в каждом случае каждое действие имеет только один вид. Но я хочу разделить представления на 10 разных страниц, и я не уверен, как структурировать контроллеры.Реструктуризация контроллера

Каждый из 4-х корпусов будет иметь одинаковые 10 действий, если они будут разделены на разные контроллеры, и информация будет отличаться, количество информации будет различаться в зависимости от роли, и такие переменные, как переменные, будут немного отличаться.

Должен ли я переместить каждый из своих контроллеров и просто использовать индекс панели #, чтобы направить их туда? Должен ли я запускать rails g controller dashboard/free и т. Д., Чтобы добавить 4 контрольных панели в свои собственные подпапки или есть более мудрый способ справиться с этим в архитектуре?

Маршруты

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 

Панель управления делает переадресацию

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

Я бы генерировать отдельные контроллеры, используя rails g controller dashboard/free и т.д., как вы сказали, но у каждого из тех, кто наследует от вашего DashboardController вместо ApplicationController. Таким образом, если любое из действий полностью одно и то же, их можно просто определить в DashboardController; или вы можете разместить там общий код для совместного использования. В зависимости от того, что это такое, также может иметь смысл поместить общий код в помощник, модель или даже пользовательский модуль в lib /, который вы включите в DashboardController.

Вы также можете сильно использовать частичные представления в представлениях, чтобы общий код представления также можно было использовать.

Смежные вопросы