重组控制器

时间:2012-05-31 11:36:53

标签: ruby-on-rails

我有一个插页式控制器操作,可根据角色属性重新路由管理员。根据角色类型,管理员将被定向到同一控制器中的4个动作之一(或捕获动作)。这样可以正常工作,因为在每种情况下,每个操作只有一个视图。但我想将视图分成10个不同的页面,我不知道如何构建控制器。

如果4个案例被分成不同的控制器,则它们将具有相同的10个动作,并且信息将不同,信息量将根据角色而有所不同,变量之类的东西会略有不同。

我应该将每个移动到自己的控制器,只需使用仪表板#index来路由它们吗? 我是否必须运行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 个答案:

答案 0 :(得分:1)

我会像你说的那样使用rails g controller dashboard/free等生成单独的控制器,但是每个控制器都从你的DashboardController而不是ApplicationController继承。这样,如果任何动作完全相同,它们只能在DashboardController中定义;或者你可以在那里放置公共代码供他们分享。根据它的不同,将共享代码放在帮助器,模型甚至是包含在DashboardController中的lib /中的自定义模块中也是有意义的。

您也可能希望在视图中大量使用partials,以便也可以共享公共视图代码。