我有before_filter
名为check_login
,看起来像这样:
def check_login
if not session[:user_id]
flash[:error] = "Please log in to continue"
redirect_to login_path
end
end
然后我将此before_filter
放入我的应用程序控制器中,然后将其排除在我的登录控制器中(使用skip_before_filter :check_login
)
问题在于,当用户第一次点击主页时(即只是localhost:3000),它会将它们重定向到登录页面并显示flash[:error]
消息。但是,对于主页,我只想显示登录表单。处理这种'特殊情况'的最简洁方法是什么?我想将skip_before_filter
放在处理主页的控制器中,但我认为这不是很干,因为如果我更改路径文件中的主页,我还必须更改位置skip_before_filter
。
谢谢!
答案 0 :(得分:1)
您可以在过滤器中添加一些操作
class LoginController < ApplicationController
skip_before_filter :check_login, :only => [:login]
def login
end
end
在Application Controller中,“空白?”检查存在和零。它很有用
def check_login
if session[:user_id].blank?
flash[:error] = "Please log in to continue"
redirect_to login_path
end
end
答案 1 :(得分:0)
您可以为主页添加命名操作:
class StaticPagesController < ApplicationController
def home
end
end
然后检查回调中的当前操作:
def check_login
if not session[:user_id]
flash[:error] = "Please log in to continue" unless params[:action] == "home"
redirect_to login_path
end
end