Rails use not condition with before_filter

Swati Aggarwal picture Swati Aggarwal · Sep 3, 2012 · Viewed 11.6k times · Source

I'm using before_filter in my application. I have a method logged_in? which returns true if the user is logged in.

def logged_in?
  !!current_user
end

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

Now in my users controller I want an action to execute only if a user is not logged in. For this I want to use the not condition with logged_in? method in before_filter as:

before_filter :!(logged_in?)

But this gives me an error. I'm resisting creating a new method for not logged in.

Please help me figure out the correct syntax to accomplish this.

Answer

Jason Noble picture Jason Noble · Sep 3, 2012

While the accepted answer seems to work, I would have done it differently.

before_filter :login_required, unless: :logged_in?

def login_required
  redirect_to login_path, notice: 'Please login'
end

This will execute the method login_required unless the user is already logged in. See http://robots.thoughtbot.com/post/159805303/before-filter-wisdom for more info.