会话帮助方法未定义

时间:2011-12-29 00:15:32

标签: ruby-on-rails ruby-on-rails-3

我有一个sessionsController,我正在尝试在我的sessions_helper中添加redirect_back_or方法以允许友好转发。

这是我得到的错误:

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

我已经重新启动了服务器,无法弄清楚为什么它没有在我的助手中找到这个方法。

我的会话帮助代码如下:

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 个答案:

答案 0 :(得分:2)

将该方法放入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
  ...

答案 1 :(得分:2)

您正在尝试从Controller调用SessionsHelper文件中的方法。帮助文件用于添加要在视图中使用的方法。您应该将redirect_back_or方法移至SessionsController。或者,如果您希望能够在多个控制器中重复使用此方法,则可能最好将其放在ApplicationController中。我建议您使用deny_access方法执行相同的操作。无论如何,这样做会更有意义,因为无论如何你都不会从视图文件重定向。