在Sessions#controller

时间:2015-12-09 12:57:00

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

我正在尝试使用我在rails 3中用于会话的相同代码。

 def create
   user = User.find_by_name(params[:name])

   if user && user.authenticate(params[:password])
     session[:user_id] = user.id    #stores the id in the session
     redirect_to user       #displays the user/show view
   else             
     flash.now[:error] = "Invalid name/password combination."
     render 'new'                   
   end
 end

我已将其调整为

def create
  user = User.find_by_username(params[:username])

  if user && user.authenticate(params[:password])
    session[:user_id] = user.id #stores the id in the session 
    redirect_to user #displays the user/show view
  else              
    flash.now[:error] = "Invalid name/password combination."
    render 'new' #shows the signin page again 
  end
end

但我现在收到错误:

"SyntaxError in SessionsController#new" 
 /sessions_controller.rb:5: syntax error, unexpected tIDENTIFIER, expecting keyword_then or ';' or '\n' ...te(params[:password]) session[:user_id] = user.id

我确定这是因为我现在使用的是rails 4而不是3并且有一些语法与4不兼容,但我似乎无法解决这个问题。

1 个答案:

答案 0 :(得分:2)

除非您将条件与关键字then的条件分开,否则不能在条件所在的行上使用if语句的主体。在这里我整理了你的代码,所以在条件之后有一个换行符。

def create
  user = User.find_by_username(params[:username]) 

  if user && user.authenticate(params[:password])
    session[:user_id] = user.id # stores the id in the session
                                # displays the user/show view
  else             
    flash.now[:error] = "Invalid name/password combination." # Shows the sign in page again 
    redirect_to user
  end
end