You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6中Bootstrap导航栏下拉菜单无法展开求助

解决Rails 6中Bootstrap下拉菜单无法展开的问题

核心问题排查与修复步骤

1. 匹配Bootstrap版本与依赖

你使用的data-bs-*属性(如data-bs-toggle="dropdown")是Bootstrap 5的语法,但当前安装的popper.js是Bootstrap 4的依赖,两者不兼容。Bootstrap 5需要的是@popperjs/core,需替换依赖:

yarn remove popper.js
yarn add @popperjs/core

同步更新environment.js中的Popper配置:

const { environment } = require('@rails/webpacker')

const webpack = require('webpack')
environment.plugins.append('Provide',
    new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery',
        Popper: ['@popperjs/core', 'default'] // 替换为@popperjs/core
    })
)

module.exports = environment

2. 修复Turbolinks下的组件初始化问题

Turbolinks会保留页面实例,导致Bootstrap JS无法绑定新加载的DOM元素。需在Turbolinks加载事件中重新初始化组件:
修改application.js:

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

import * as bootstrap from 'bootstrap/dist/js/bootstrap.bundle' // 使用包含Popper的bundle版本

document.addEventListener('turbolinks:load', () => {
  // 初始化所有下拉菜单
  document.querySelectorAll('[data-bs-toggle="dropdown"]').forEach(el => {
    new bootstrap.Dropdown(el)
  })
})

3. 修正ERB代码的标签闭合

你的导航栏ERB代码中<ul class="navbar-nav">未闭合,补上闭合标签避免DOM解析异常:

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
            Dropdown
          </a>
          <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><hr class="dropdown-divider"></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
          </ul>
        </li>
      </ul> <!-- 补上该闭合标签 -->
    </div>
  </div>
</nav>

4. 清理缓存并重启服务

修改配置后,清理Webpacker缓存并重启Rails服务:

rails assets:clobber
rails server

内容的提问来源于stack exchange,提问作者Acheese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:57:14