2010-11-20 6 views
0

Je développe une application Facebook dans Rails. Certaines pages (pas toutes) nécessitent que l'utilisateur soit connecté; sinon, ils sont redirigés vers une page "login". Je ne peux pas utiliser redirect_to pour cela, car la redirection doit être effectuée via Javascript (car il redirige le cadre parent); de plus, la redirection doit connaître l'adresse de la page initialement demandée (pour revenir à), donc je ne peux pas rediriger vers une page fictive qui fera la redirection.Javascript redirect_to in rails

J'ai essayé d'utiliser une mise en page avec render pour y parvenir, mais la vue d'origine est toujours exécutée (bien que non fournie); puisque la vue nécessite des variables qui n'existent que lorsque l'utilisateur est connecté, cela crée des erreurs, écrasant le script.

Est-il possible de rendre la mise en page mais d'empêcher l'exécution de la vue? Y a-t-il une meilleure façon d'accomplir cela?

+0

Avez-vous essayé render: text => ""? – Bohdan

+0

rendu: le texte fonctionne parfaitement, merci! – error792

Répondre

0

Pourriez-vous mettre votre logique dans une méthode appelée par before_filter dans application_controller et vérifier si la redirection est nécessaire? Quelque chose comme:

class ApplicationController < ActionController::Base 
    before_filter :authenticate_user! 

    def authenticate_user! 
     if (authentication_required? && !user_authenticated?) 
      render :js => "[some javascript here]" and return 
     end 
    end 

    def authentication_required? 
     # logic to determine if auth is needed 
    end 

    def user_authenticated? 
     # logic to determine if user is authenticated 
    end 
end 

Render: js => ... devrait vous permettre de JavaScript avec tout ce que vous rendez valeurs doivent revenir à la page demandée initialement (ou vous pouvez rendre un autre fichier ou d'un texte arbitraire).