2015-03-23 4 views
0

Есть ли простой способ написать вспомогательный метод, чтобы всегда обновлять ранее посещаемый URL-адрес в сеансе. Я пробовал метод ниже, но сохраненный url всегда является текущим. Я хотел бы иметь возможность использовать этот помощник во всех моих контроллерах для перенаправления.Ruby on rails: предыдущий помощник URL для всего приложения

#application_controller.rb 
class ApplicationController < ActionController::Base 
before_filter :my_previous_url 

def my_previous_url 
    session[:previous_url] = request.referrer 
    end 

helper_method :my_previous_url 
end 

Я использовал его в моем методе обновления в контроллере пользователя, как показано ниже, но он всегда перенаправляет на ту же открытой URL (вид выглядит как обновление было хита).

def update 
    if current_user.admin == true and @user.update(user_params) 
     redirect_to my_previous_url, notice: "Password for User #{@user.username} has Successfully been Changed." 
     return 
    elsif current_user.admin == false and @user.update(user_params) 
     session[:user_id] = nil 
     redirect_to login_path, notice: "Password for User #{@user.username} has Successfully been Changed. Please Log-In Using the New Password." 
     return 
    end 
    respond_to do |format| 
     if @user.update(user_params) 
    changed = true 
     format.html { redirect_to logout_path } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

ответ

0

request.referer - это не то, что вы хотите здесь, так как оно будет настроено на переадресации страницы, тем самым потеряв страницу, из которой вы пришли. Я думаю, что у вас есть подразумеваемое требование о том, что он должен вернуть последний использованный URL-адрес, который был разными в текущий момент, так ли это? Кроме того, я думаю, что вы только захотите установить его для запросов GET, иначе вы рискуете отправить людей обратно на неправильный URL-адрес, так как они будут отправлены обратно с запросом GET. Я предполагаю, что цель этого previous_url - дать людям ссылку «назад».

Кроме того, не пытайтесь установить метод previous_url, чтобы метод снова считывал его.

Я хотел бы сделать это следующим образом:

#application_controller.rb 
class ApplicationController < ActionController::Base 
    before_filter :set_previous_url 
    helper_method :previous_url 

    def set_previous_url 
    if request.method == :get && session[:previous_url] != session[:current_url] 
     session[:previous_url] == session[:current_url] 
     session[:current_url] = request.url   
    end 
    end 

    def previous_url 
    session[:previous_url] 
    end 
end 
+0

Что я хочу сделать то, что пользователи могут изменить свой пароль с главной страницы, форма будет отображаться для изменения пароля. Также к этой же форме редактирования могут обращаться админы с другой страницы. Я хотел бы перенаправить каждого человека на свою исходную страницу доступа после отправки или отмены формы. Я пробовал ваш код, и моя страница все еще обновляется. Итак, моя идея: мне нужно знать, откуда пользователи обратились к форме, и единственный способ, которым я могу думать, это предыдущий метод url. – Mais