Before_filter倒置?

时间:2013-02-10 01:51:49

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

我目前是用户:is_logged?进入我的控制器以检查用户是否已登录,但我希望某些区域仅用于记录用户。

  private
  def is_logged?
    !!current_user
  end

  private
  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  helper_method :is_logged?
  helper_method :current_user

有没有办法让before_filter评估相反的结果。

Currenty:is_logged?如果记录则返回true,否则返回false。 如果没有记录,我希望它返回true,反之亦然。

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议您只保留一种方法来确定用户是否已登录,而不是使用logged_in?not_logged_in?方法重复代码。为了简单和可读性,可能是这样的:

private

  def logged_in?
    !current_user.nil?
  end
  helper_method :logged_in?

然后,当您想要 登录的用户执行某些操作时:

if logged_in?
  # do something for logged in users
end

专门针对登录的用户执行某些操作:

unless logged_in?
  # do something for users who are not logged in.
end

答案 1 :(得分:0)

我确信有一种方法可以简化这一点,但出于学习目的,我认为这样做。

def not_logged_in?
  if defined? current_user
    current_user.nil?
  else
    true
  end
end