Search code examples
ruby-on-railsrubynomethoderror

correct_user without using current_user?


I want people who are not logged in to be able to see the show page. Right now they get a NoMethodError error for current_user.

def show
  @correct_user = current_user.challenges.find_by(id: params[:id])
end

sessions_helper

  # Returns the current logged-in user (if any).
  def current_user
    if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by(id: user_id)
      if user && user.authenticated?(:remember, cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end

I use @correct_user because I only want to show certain things to the creator of the challenge:

<% if @correct_user %>
  # show stuff to user who made challenge  
<% else %>
  # show to everyone else, which would mean logged in users and non logged in users 
<% end %> 

How can I allow non-logged in users to see the show page, except for what falls within @correct_user?


Solution

  • if current_user
      @correct_user = current_user.challenges.find_by(id: params[:id])
    else
      @correct_user = nil
    end