2011-03-03 4 views
3

Я полный noob, работающий над учебниками Rails Майкла Хартла (Awesome), и у вас есть проблема с дружеской переадресацией в Ch.10.2.3. Цель состоит в том, чтобы попытаться сохранить местоположение, перенаправить на страницу с подписью, а затем переадресовать обратно к исходному назначению, когда регистрация будет завершена. Моя проблема заключается в том, что он просто отображает стандартную страницу профиля пользователя после входа/создания сеанса, а не перенаправления.Проблема с перенаправлением Rails - Учебник Rails Rails 10.2.3

У меня есть это в sessions_controller:

def create 
    user = User.authenticate(params[:session][:email], 
          params[:session][:password]) 
    if user.nil? 
    flash.now[:error] = "Invalid email/password combination." 
    @title = "Sign in" 
    render 'new' 
    else 
    sign_in user 
    redirect_back_or user 
    end 
end 

И это в sessions_helper:

def authenticate 
    deny_access unless signed_in? 
end 

def deny_access 
    store_location 
    redirect_to signin_path, :notice => "Please sign in to access this page." 
end  

def redirect_back_or(default) 
    redirect_to(session[:return_to] || default) 
    clear_return_to 
end 

private 
    def store_location 
    session[:return_to] = request.fullpath 
    end 

def clear_return_to 
    session[:return_to] = nil 
end 

Я уверен, что я еще раз сделал глупую, простую ошибку, но я не могу найти его .. помочь?

+0

Вы попробовали 'session [: return_to] = request.request_uri'? это было какое-то время, поэтому я не могу вспомнить, будет ли request.fullpath иметь что-то, что вы можете «redirect_to». это возможно, но понял, что это будет что-то легкое, что вы можете проверить. – sorens

+0

У меня есть, но из других комментариев я думаю, что request_uri устарел с Rails 3.0. – GroundskeeperWillie

+0

Трудно не иметь всего кода, но проверить одно: убедитесь, что метод «store_location» на самом деле вызван где-то во время процесса входа в систему. –

ответ

1

Код можно получить здесь: https://github.com/railstutorial
Рассмотрите возможность создания новой ветви git (или нового проекта) для себя, которая использует только этот код репозитория. Тогда у вас будет рабочая локальная версия для сравнения, если все пойдет не так.

+0

Хорошее предложение Перри. Есть ли способ, с помощью которого можно легко сравнить два тела кода для отслеживания ошибки? – GroundskeeperWillie

+0

Моя первая мысль - использовать diff команды unix, но я не знаю, подходит ли это как легко. –

+0

Легко, но требует много времени! И со смешанными результатами. Не было различимой разницы, поэтому я вернулся туда, где я точно знал, что мои тесты работают (глава 9), начал новую ветку и делал это снова и снова. И это работает. Итак, хорошая новость в том, что он работает, плохие новости - я честно понятия не имею, почему. Положительно, по крайней мере, я добавил в свой репертуар удивительно универсальную новую команду. – GroundskeeperWillie

Смежные вопросы