最近在跟着 RoR 教程做一个网站,Rails 版本 6.0.1,在 Account 这个文字上设置了 dropdown,但是鼠标指上去以后并没有下拉显示。 如下是在 app/views/layouts/_header.html.rb 里面关于 dropdown 的代码:
<header class="navbar navbar-fixed-top navbar-inverse">
<small>
<div class="container">
<%= link_to image_tag("*", alt: "*"), home_path, id: "logo_left" %>
<nav>
<ul class="nav navbar-nav navbar-right">
<li><%= link_to "Help", help_path %></li>
<% if logged_in? %>
<li><%= link_to "Users", '#' %></li>
<li class="dropdown">
<a href="#", class="dropdown-toggle", data-toggle="dropdown">
Account <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><%= link_to "Profile", current_user %></li>
<li><%= link_to "Settings", '#' %></li>
<li class="divider"></li>
<li>
<%= link_to "Log out", logout_path, method: :delete %>
</li>
</ul>
</li>
<% else %>
<li><%= link_to "Log in", login_path %></li>
<% end %>
</ul>
</nav>
</div>
</small>
</header>
我忽然想起来,这个还要在 application.js 中引入 Bootstrap JavaScript 库,但问题是昨天我做的时候,在 app/assets 里没有/javascripts 这个文件夹,更没有 application.js 这个文件。。。于是我从另一个文件夹里拷贝改名了一个文件。。。这个会不会有影响?
问题已解决,见评论 logout 这个功能,我已经在 config/routes.rb 里面指定了
delete '/logout', to: 'sessions#destroy'
直接在链接后增加/logout 显示 No route matches [GET] "/logout" Rails.root: /home/ubuntu/environment/*** 但是他下面却显示有这个 routes
logout 相关代码: app/controllers/session_controller
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out
redirect_to root_url
end
end
app/helpers/session_helper
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
def logged_in?
!current_user.nil?
end
def log_out
session.delete(:user_id)
@current_user = nil
end
end
请前辈们解惑!