Javascript redirect_to в рельсах - PullRequest
       1

Javascript redirect_to в рельсах

0 голосов
/ 21 ноября 2010

Я разрабатываю приложение для Facebook в Rails. Некоторые (не все) страницы требуют, чтобы пользователь вошел в систему; если нет, они перенаправляются на страницу входа в систему. Я не могу использовать redirect_to для этого, так как перенаправление должно быть сделано через Javascript (так как он перенаправляет родительский фрейм); кроме того, перенаправление должно знать адрес первоначально запрашиваемой страницы (чтобы вернуться), поэтому я не могу просто перенаправить на фиктивную страницу, которая будет выполнять перенаправление.

Я пытался использовать макет вместе с render для достижения этой цели, однако исходный вид все еще выполняется (хотя и не выдан); поскольку для представления требуются переменные, которые существуют только при входе пользователя в систему, это создает ошибки, приводящие к сбою сценария.

Можно ли визуализировать макет, но остановить выполнение представления? Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 21 ноября 2010

Не могли бы вы поместить свою логику в метод, вызываемый before_filter в application_controller, и проверить, нужно ли перенаправление? Что-то вроде:

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 => ... должна позволять вам отображать JavaScript с любыми значениями, которые вам понадобятся для возврата на первоначально запрошенную страницу (или вы можете отобразить какой-то другой файл или произвольный текст).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...