2010-07-01 82 views
3

我正在開發一個rails應用程序,我有2個不同的用戶角色:高級和基本。針對不同用戶角色的不同視圖集

我想管理2個不同的視圖集合:一個用於高級用戶,一個用於基本用戶。

目前我這樣我的工作:

case current_operator.op_type 
     when 'basic' 
     format.html { render :template => "devices/index_basc.html.erb" } 
     when 'advanced' 
     format.html # index.html.erb 
end 

,但我不喜歡在指定的每一個動作爲基本用戶模板({呈現:模板=>「設備/ index_basc.html.erb」 }) 我覺得還有一些其他的方法(我希望更整潔:)

你有什麼想法嗎?

謝謝 亞歷山德羅

回答

7

你可以做這樣的事情在這個RailscastMobile Devices

config/initializers/mime_types.rb添加:

Mime::Type.register_alias "text/html", :basic 

app/controllers/application_controller.rb加:

before_filter :check_user_status 
private 
def check_user_status 
    request.format = :basic if current_operator.op_type == 'basic' 
end 

現在,你可以做你的控制器如下:

class SomeController < ApplicationController 
    def index 
    # … 
    respond_to do |format| 
     format.html # index.html.erb 
     format.basiC# index.basic.erb 
    end 
    end 
end 
+0

index.basic.erb?其中的文件格式爲 – Salil 2010-07-01 11:10:38

+0

'Mime :: Type.register_alias「text/html」,:basic'這是html的別名,但這種方式根據用戶類型可以有兩個不同的模板 – jigfox 2010-07-01 11:16:56

+0

什麼是downvote?很高興知道我做了什麼錯誤來糾正錯誤。 – jigfox 2010-07-01 11:18:11

0

當你只有兩個不同的用戶角色,你可以做到這一點

page = (current_operator.op_type =='basic')? "devices/index_basc.html.erb" : "index.html.erb" 
format.html { render :template => page} 
+2

但他仍然需要做的每一個動作。他說:「但我不想在每個操作中指定基本用戶的模板({render:template =>」devices/index_basc.html.erb「})」 – jigfox 2010-07-01 11:09:19