2013-10-08 20 views
0

我有一个Rails应用程序,其中包含大量的资源。优雅处理多个视图相同的行动

该应用程序被分成两个部分:在裸域存在一个面向公众的区域:

example.com 

而且管理员版本栖息管理员子域:

admin.example.com 

每个资源控制器将标准CRUD操作提供给已登录且位于管理子域中的管理员用户,包括针对indexshow操作的管理员专用视图。

面向公众的面积也有各自的资源indexshow行动,但他们的意见非常不同形式的管理视图。

因此,我需要根据子域显示不同的indexshow视图。

我该如何做到这一点,同时避免乱抛我的控制器与逻辑运算符检查当前的子域?将每个控制器分为单独的管理员和公共风味是没有意义的,因为所有不同的是为indexshow呈现的视图。

回答

2

一种选择是为每个子域app/views/admin创建一个视图文件夹,并将该子域的所有视图文件放入其中,例如, app/views/admin/foos/index.html.erb

然后使用prepend_view_path基于所述子域这样改变的路径:

class ApplicationController < ActionController::Base 
    before_filter :prepend_view_paths 

    def prepend_view_paths 
    subdomain = request.subdomain 
    prepend_view_path "app/views/#{subdomain}" 
    end 
end 

的前置方法添加给定路径到队列的前部,并且如果没有找到,则搜索该文件位于默认路径中。

警告:未经测试的代码

+0

不错。我完全错过了'prepend_view_path'。 – Undistraction