2017-08-11 58 views
0

我有一個導航欄,顯示一組不同的鏈接基於如果用戶登錄或不。我已經設置了一個logged_in?方法在一個條件語句內以完成此操作。問題出在我單擊登錄按鈕併成功登錄後。系統不會按預期更改導航欄。我必須刷新頁面或點擊另一個鏈接才能註冊。Rails logged_in?方法不改變導航欄

application.html.erb

<% if logged_in? %> 
    <li><%= link_to "Oppurtunity", companies_path %></li> 
    <li><%= link_to "Pipeline", deals_path %></li> 
    <li><%= link_to "Tasks", tasks_path %></li> 
    <li><%= link_to "My Account", edit_user_path(current_user) %></li>   
    <li><%= link_to "Log Out", logout_path, method: :delete, class: 'btn btn-default navbar-btn' %></li> 
<% else %> 
    <li><%= link_to "Log In", login_path, class: 'btn btn-default navbar-btn' %></li> 
    <li><%= link_to "Contact", new_contact_path %></li> 
<% end %> 

session_helper.rb

# 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 

def logged_in? 
    !current_user.nil? 
end 

session_controller.rb

class SessionsController < ApplicationController 

def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
    if user.activated? 
     # Log the user in and redirect to the user's show page. 
     log_in user 
     params[:session][:remember_me] == '1' ? remember(user) : forget(user) 
     redirect_to root_url(subdomain: user.subdomain), notice: "Logged in!" 
    else 
     message = "Account not activated." 
     message += "Check your email for the activation link." 
     flash[:warning] = message 
     redirect_to root_url 
    end 
    else 
    flash.now[:danger] = 'Invalid email/password combination' 
    render 'new' 
    end 
end 

    def destroy 
    log_out if logged_in? 
    redirect_to root_url(subdomain: false) 
    end 
end 
+0

顯示代碼爲控制器上的登錄操作 – dbugger

+0

更改條件語句,如果A = B到如果==灣 – xiaocui

+0

您是否在使用ajax登錄? – Yana

回答

1

您建立current_user邏輯錯誤。在比較任何兩個對象時,您需要使用==,但您使用的是=。嘗試改變current_user方法如下

def current_user 
    if (user_id == session[:user_id]) #here 
    @current_user ||= User.find_by(id: user_id) 
    elsif (user_id == cookies.signed[:user_id]) #and here 
    user = User.find_by(id: user_id) 
    if user && user.authenticated?(:remember, cookies[:remember_token]) 
     log_in user 
     @current_user = user 
    end 
    end 
end 
+0

我試着改變=爲==這兩行,現在得到一個錯誤。 – nomad

+0

@ DamonClark什麼是錯誤? – Pavan

+0

錯誤是:未定義的局部變量或方法'user_id'你的意思是?用戶 – nomad