2010-07-01 10 views
3

Je développe une application rails et j'ai 2 rôle de l'utilisateur différent: avancé et basique. Plutôt que de masquer les liens dans les vues de l'utilisateur de base (à l'aide de CanCan), je veux gérer 2 séries de vues différentes: une pour l'utilisateur avancé et une pour l'utilisateur de base.Différents ensembles de vues pour les différents rôles de l'utilisateur

Actuellement je travaille ainsi:

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

Mais je n'aime pas préciser à chaque action le modèle pour l'utilisateur de base ({render: template => "dispositifs/index_basc.html.erb" }) Je pense qu'il y a une autre façon (j'espère plus soignée :)

Avez-vous des idées?

Merci, Alessandro

Répondre

7

Vous pouvez faire quelque chose comme dans ce RailscastMobile Devices:

à config/initializers/mime_types.rb ajouter:

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

à app/controllers/application_controller.rb ajouter:

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

Maintenant, vous pouvez juste faire ce qui suit dans vos contrôleurs:

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? quel format de fichier est ce – Salil

+0

'Mime :: Type.register_alias" text/html ",: basic' c'est un alias pour html, mais de cette façon vous pouvez avoir deux modèles différents en fonction du type d'utilisateur – jigfox

+0

A quoi sert le downvote? Ce serait bien de savoir ce que j'ai fait de mal pour le corriger. – jigfox

0

Comme vous avez seulement deux rôle de l'utilisateur différent, vous pouvez le faire

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

Mais il a encore besoin de le faire dans toutes les actions. Il a dit: "Mais je n'aime pas spécifier à chaque action le modèle pour l'utilisateur de base ({render: template =>" devices/index_basc.html.erb "})" – jigfox