2010-11-16 3 views
1

Je construis une application Rails où j'ai besoin de faire un test d'utilisabilité de trois vues différentes pour la même application. Ma pensée est de changer le chemin de vue par défaut en fonction du sous-domaine.Vue différente pour différents sous-domaines dans Rails

Par exemple, je voudrais être en mesure de définir les chemins quelque chose comme:

option1.mysite.com => views/option_1 
option2.mysite.com => views/option_2 
option3.mysite.com => views/option_3 

Je voudrais garder les modèles et les contrôleurs de la même, mais changer les vues en fonction du sous-domaine . Quel pourrait être le meilleur moyen de le faire?

Répondre

1

nous le faisons quelque chose comme ceci:

session[:site] = case request.subdomains.last 
     when "a" then "a" 
     when "b" then "b" 
     when "c" then "c" 
end 

Cela fait partie d'une méthode set_site dans notre contrôleur d'application. Chaque requête vérifie si session[:site] est défini; sinon, il appelle set_site pour le définir. Dans votre cas, il vous suffit maintenant d'introduire une logique dans vos vues pour présenter les choses différemment selon la valeur de session[:site], mais c'est encore mieux si votre HTML actuel est le même et la différence majeure est dans le CSS. Ensuite, il suffit de charger différents fichiers CSS en fonction de la valeur de session[:site].

+0

Bonjour, ceci est utile. Existe-t-il une méthode pour définir le chemin d'accès par défaut? – Chanpory

+0

Je n'ai pas vraiment répondu à votre question, je l'ai fait :) :) Nous avons choisi de ne pas faire les choses comme ça, mais vous pouvez regarder [la documentation] (http://railsapi.com/) pour ActionController :: Base.view_paths = et voyez si cela fait ce que vous cherchez. Il est certainement possible de modifier les chemins que le contrôleur recherche de cette façon; Je ne suis pas sûr si c'est un changement par demande, cependant. – pjmorse

+0

Essayé en utilisant view_paths et prepend_view_path mais malheureusement il persiste entre les demandes, donc la vue est définie sur le dernier sous-domaine demandé, ce qui n'est pas ce que je veux :-( – Chanpory

Questions connexes