Вот как я решаю эту проблему. Я предполагаю, что у вас есть некоторый тип метода аутентификации внутри вашего контроллера приложения.
Внутри вашего контроллера приложений есть что-то вроде следующего:
def authenticate
unless current_user
session[:protected_destination] = request.fullpath
flash[:notice] = "You're not logged in."
redirect_to login_path
return false
end
end
Затем, в вашей логике входа в систему вы должны иметь некоторый код, подобный следующему. Для меня вход в систему произошел в контроллере UserSession, так как я использую Authlogic.
def new
session[:protected_destination] ||= request.referrer || root_path
if current_user
redirect_to session[:protected_destination]
session[:protected_destination] = nil
else
@user_session = UserSession.new
end
end
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
protected_destination = session[:protected_destination] || root_path
session[:protected_destination] = nil
redirect_to protected_destination
else
render :action => :new
end
end
Как видите, пункт назначения, в который вы хотите попасть, хранится внутри сеанса. Когда вы входите в систему, он проверяет, идете ли вы куда-нибудь, а затем перенаправляет вас туда, где вы были. Если нет, он просто приведет вас к корневому URL.
Надеюсь, это поможет.