我有一个插页式控制器操作,可根据角色属性重新路由管理员。根据角色类型,管理员将被定向到同一控制器中的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
答案 0 :(得分:1)
我会像你说的那样使用rails g controller dashboard/free
等生成单独的控制器,但是每个控制器都从你的DashboardController而不是ApplicationController继承。这样,如果任何动作完全相同,它们只能在DashboardController中定义;或者你可以在那里放置公共代码供他们分享。根据它的不同,将共享代码放在帮助器,模型甚至是包含在DashboardController中的lib /中的自定义模块中也是有意义的。
您也可能希望在视图中大量使用partials,以便也可以共享公共视图代码。