Метод определения сессий не определен - PullRequest
1 голос
/ 29 декабря 2011

У меня есть sessionController, и я пытаюсь добавить метод redirect_back_or в моем session_helper, чтобы разрешить дружественную пересылку.

Вот ошибка, которую я получаю:

undefined method `redirect_back_or' for #<SessionsController:0x007f9fa1b51ec0>

Я перезапустилсервер и не может понять, почему он не находит этот метод в моем помощнике.

Код помощника My Sessions выглядит следующим образом:

module SessionsHelper

  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

end

Контроллер моего сеанса

class SessionsController < ApplicationController

  def create
    auth = request.env["omniauth.auth"]
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
    session[:user_id] = user.id
    redirect_back_or user
    #redirect_to root_url, :notice => "Signed in!"
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice => "Signed out!"
  end

end

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Вы пытаетесь вызвать метод, который находится в вашем файле SessionsHelper из вашего контроллера.Вспомогательный файл предназначен для добавления методов, которые будут использоваться в представлении.Вы должны переместить метод redirect_back_or на SessionsController.Или, если вы хотите иметь возможность многократно использовать этот метод на нескольких контроллерах, может быть предпочтительнее поместить его в ваш ApplicationController.Я бы порекомендовал вам сделать то же самое с вашим deny_access методом.В любом случае, было бы разумнее сделать это, поскольку в любом случае вы не будете перенаправлять из файла представления.

2 голосов
/ 29 декабря 2011

Поместите этот метод в ApplicationController:

class ApplicationController < ActionController::Base
  private
  def redirect_back_or(default)
      redirect_to(session[:return_to] || default)
      clear_return_to
  end
end

или включите модуль SessionsHelper в свой контроллер, чтобы использовать метод:

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