2013-10-08 93 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