Как сохранить, с какой страницы не вошел пользователь, прибывший в рельсы - PullRequest
1 голос
/ 28 августа 2011

(1) «Хозяин» делится ссылкой на «кампанию» на сайте, например, / Кампании / 17

(2) Посетитель / кампаний / 17 нажимает на что-то, предназначенное только для пользователей, вошедших в систему / зарегистрировавшихся и переходящее на страницу входа / регистрации

Я пытаюсь сохранить идентификатор кампании (например, 17) в параметрах нового пользователя (для которого я думал об использовании скрытого поля), но не уверен, как сохранить идентификатор. Я думал о request.path, но не знаю, как перенести это на следующую страницу.

1 Ответ

1 голос
/ 28 августа 2011

Вот как я решаю эту проблему. Я предполагаю, что у вас есть некоторый тип метода аутентификации внутри вашего контроллера приложения.

Внутри вашего контроллера приложений есть что-то вроде следующего:

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.

Надеюсь, это поможет.

...