xavier carbonel
xavier carbonel

Reputation: 339

Rails: Notice error

While trying to follow a tutorial, I raised an error when I test the "Sign out" link. I checked the difference with the tutor, but I couldn't figure out why I can't do it my way and why the error occurs on this spot.

My code:

class SessionsController < ApplicationController

  def create
    if user = User.authenticate(params[:email], params[:password]) 
      session[:user_id] = user.id
      redirect_to(session[:intended_url] || user), notice:"Welcome back, #{user.name}"
      session[:intended_url] = nil
    else
      flash.now[:alert] = "Invalid email/password combination! you are a failure"
      render :new
    end
  end
  def destroy
    session[:user_id] = nil
    redirect_to root_url, notice: "You're now signed out!"
  end
end

The correction code:

class SessionsController < ApplicationController
  def new
  end

  def create
    if user = User.authenticate(params[:email], params[:password])
      session[:user_id] = user.id
      flash[:notice] = "Welcome back, #{user.name}!"
      redirect_to(session[:intended_url] || user)
      session[:intended_url] = nil
    else
      flash.now[:alert] = "Invalid email/password combination!"
      render :new
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url, notice: "You're now signed out!"
  end
end

The error that was raised:

SyntaxError in SessionsController#destroy

C:/Users/xcpro/ve2/2B3/app/controllers/sessions_controller.rb:6: syntax error, unexpected ',', expecting keyword_end ...ession[:intended_url] || user), notice:"Welcome back, #{user... ... ^

Upvotes: 1

Views: 76

Answers (1)

Alexander Kireyev
Alexander Kireyev

Reputation: 10825

The problem is that method redirect_to take parameters only in parentheses, however notice also should passed in it. Add parentheses around all redirect_to parameters:

 redirect_to( (session[:intended_url] || user), notice: "Welcome back, #{user.name}" )

or maybe space after redirect_to would work also:

 redirect_to (session[:intended_url] || user), notice: "Welcome back, #{user.name}"

Upvotes: 2

Related Questions