0

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

如果将这 4 个案例拆分到不同的控制器中,每个案例将具有相同的 10 个操作,并且信息会有所不同,信息量会因角色而异,变量之类的内容也会略有不同。

我应该将每个移出到它自己的控制器并使用 dashboard#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
4

1 回答 1

1

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

您可能还想在视图中大量使用局部视图,以便也可以共享通用视图代码。

于 2012-05-31T15:06:39.917 回答