2010-11-20 10 views
0

Ich entwickle eine Facebook-Anwendung in Rails. Bei einigen (nicht allen) Seiten muss der Benutzer angemeldet sein. Wenn nicht, werden sie auf eine "Login" -Seite umgeleitet. Ich kann redirect_to dafür nicht verwenden, da die Weiterleitung über Javascript erfolgen muss (da es den übergeordneten Frame umleitet); Außerdem muss die Umleitung die Adresse der ursprünglich angeforderten Seite kennen (um darauf zurückzukommen), so dass ich nicht einfach zu einer Dummy-Seite umleiten kann, die die Umleitung ausführt.Javascript redirect_to in Schienen

Ich habe versucht, ein Layout zusammen mit render zu verwenden, um dies zu erreichen, aber die ursprüngliche Ansicht wird immer noch ausgeführt (obwohl nicht erbracht); Da die Ansicht Variablen benötigt, die nur vorhanden sind, wenn der Benutzer angemeldet ist, führt dies zu Fehlern und führt zum Absturz des Skripts.

Ist es möglich, das Layout zu rendern, aber die Ausführung der Ansicht zu stoppen? Gibt es einen besseren Weg, dies zu erreichen?

+0

Haben Sie versucht, render: text => ""? – Bohdan

+0

render: Text funktioniert perfekt, danke! – error792

Antwort

0

Könnten Sie Ihre Logik in eine Methode einfügen, die von before_filter in application_controller aufgerufen wird, und prüfen, ob eine Umleitung erforderlich ist? Etwas wie:

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 

Die Render: js => ... sollten Sie JavaScript lassen machen mit dem, was Werte, die Sie auf die ursprünglich angeforderte Seite zurückkehren müssen (oder Sie können eine andere Datei oder einen beliebigen Text übertragen).

Verwandte Themen