如何在rails中不应用before_filter for root route?

时间:2014-02-08 09:20:15

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

我有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

谢谢!

2 个答案:

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