Parmis les choses qui font que Ruby On Rails est une merveille à utiliser, il y a la fonction redirect_to()
, qui, comme son nom l’indique, permet de rediriger le visiteur vers une autre partie de l’application.
Le petit bémol est qu’il ne s’agit en fait que d’une simple redirection HTTP, et, dans le cadre d’un projet, j’avais besoin de pouvoir rediriger le visiteur vers une page ouverte dans une Lightview. J’ai donc du réecrire une petite fonction toute simple, redirect_to_lightview()
.
application.rb
1
def redirect_to_lightview(url)
2
session[:lightview_to_open] = url
3
redirect_to :controller => "default_controller", :action => "default_action"
4
end
Cette fonction enregistre simplement l’url de la page à ouvrir dans la Lighview. On redirige ensuite le visiteur vers notre page par défaut. Il faudra bien entendu vous assurer que la variable de session lightview_to_open existe.
Pour terminer, il suffit d’intégrer un petit bout de code à la fin du layout utilisé. Ce code vérifie l’existance de la variable de session, et, au besoin, ouvre la Lightview désirée.
layout.html.erb
1
<% if session[:lightview_to_open] != ""%>
2
document.observe("dom:loaded", function(){
3
Lightview.show({
4
href: '<%= session[:lightview_to_open] %>',
5
rel: 'ajax',
6
options: {
7
ajax: {
8
method: 'get'
9
}
10
}
11
});
12
});
13
<% session[:lightview_to_open] = "" %>
14
<% end #endif %>
La fonction est désormais utilisable dans n’importe quel controlleur de l’application. Si nous désirons renvoyer l’utilisateur vers le Lightview lors d’un appel à l’URL /user/login/
, il suffit de procéder comme suit :
1
def login
2
if !request.xhr?
3
redirect_to_lightview("/user/login")
4
else
5
# le reste du code ici
6
end
7
end