Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails是否已登录?方法不更改导航栏_Ruby On Rails_Authentication_Stay Logged In - Fatal编程技术网

Ruby on rails Rails是否已登录?方法不更改导航栏

Ruby on rails Rails是否已登录?方法不更改导航栏,ruby-on-rails,authentication,stay-logged-in,Ruby On Rails,Authentication,Stay Logged In,我有一个导航栏,根据用户是否登录显示一组不同的链接。我已设置一个已登录的\u?方法,以完成此操作。问题是在我单击“登录”按钮并成功登录之后。系统没有按预期更改导航栏。我必须刷新页面或点击其他链接才能注册 application.html.erb <% if logged_in? %> <li><%= link_to "Oppurtunity", companies_path %></li> <li><%= link

我有一个导航栏,根据用户是否登录显示一组不同的链接。我已设置一个已登录的\u?方法,以完成此操作。问题是在我单击“登录”按钮并成功登录之后。系统没有按预期更改导航栏。我必须刷新页面或点击其他链接才能注册

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 %>
会话_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
class sessioncontroller
您错误地设置了当前用户的
逻辑。在比较任何两个对象时,您需要使用
=
,但您使用的是
=
。尝试将
当前用户
方法更改为如下

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

在控制器上显示登录操作的代码将a=b的条件语句更改为a=b的条件语句。是否使用ajax登录?我尝试将这两行的=更改为==,但现在收到一个错误。错误是:未定义的局部变量或“user\u id”方法,您的意思是什么?user@DamonClark是的,那是因为你没有定义
user\u id
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