我有一个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
答案 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
方法执行相同的操作。无论如何,这样做会更有意义,因为无论如何你都不会从视图文件重定向。