Rails项目Navbar仅首页显示,帖子页不显示(新手求助)
嘿,别着急,新手遇到这种问题太正常啦!我帮你梳理几个最可能的原因和解决办法,你一步步排查就行:
1. 先确认Partial的命名和存放位置
Rails里的partial文件名必须以下划线开头,比如你的Navbar partial应该叫 _navbar.html.erb,一般大家会把这类通用组件放在 app/views/shared 文件夹里,或者 app/views/layouts 文件夹下,这样所有页面都能方便引用。
2. 检查全局布局文件是否渲染了这个Partial
所有页面默认会使用 app/views/layouts/application.html.erb 作为布局,你需要确保这个文件里已经添加了渲染Navbar的代码。比如如果你的partial在shared文件夹,要写:
<%= render 'shared/navbar' %>
要是放在layouts文件夹下,就写:
<%= render 'layouts/navbar' %>
注意:如果你的帖子页用了自定义布局(比如post.html.erb),那这个自定义布局里也必须加上上面的渲染代码,不然帖子页就不会加载Navbar。
3. 检查控制器是否指定了特殊布局
打开PostsController,看看有没有类似这样的代码:
class PostsController < ApplicationController layout 'post' # 这里指定了自定义布局 # ...其他代码 end
如果有的话,你要么把post.html.erb布局里加上Navbar的渲染代码,要么删掉这行让帖子页用默认的application布局。
4. 确认Partial的渲染路径是否正确
有时候路径写错了也会导致加载失败,比如你在application.html.erb里只写了<%= render 'navbar' %>,但partial实际在shared文件夹,Rails就找不到它,必须写完整的相对路径才行。
5. 查看服务器日志找线索
启动服务器后,访问帖子页,然后看终端里的服务器日志,有没有类似Missing partial...的报错信息,这个能直接告诉你是不是Partial找不到,或者路径不对。
另外,你提供的Navbar代码看起来没问题,我帮你整理成规范的代码块:
<div class='container'> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <%= link_to "LessonRoll", root_path, class: 'navbar-brand' %> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor03" aria-controls="navbarColor03" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarColor03"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <%= link_to 'Home', root_path, class: 'nav-link' %> </li> <li class="nav-item"> <%= link_to 'Posts', posts_path, class: 'nav-link' %> </li> <li class="nav-item"> <a class="nav-link" href="#">Pricing</a> </li> <li class="nav-item"> <a class="nav-link" href="#">About</a> </li> <% if current_user %> <li class="nav-item dropdown"> <a class = "nav-link dropdown-toggle" data-toggle="dropdown" href="#" id="download">Admin Menu<span class="caret"></span></a> <div class="dropdown-menu" aria-labelledby="download"> <%= link_to "App Settings", app_setting_path(@app_setting), class: 'dropdown-item' %> <div class="dropdown-divider"></div> Link </div> </li> <% end %> </ul> <ul class="nav navbar-nav ml-auto"> <% if !current_user %> <li class="nav-item"> <%= link_to "Sign Up", new_user_registration_path, class: 'nav-link' %> </li> <li><%= link_to "Log In", new_user_session_path, class: 'nav-link' %> </li> <% else %> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" id="download"><%= current_user.username if current_user %> <span class="caret"></span></a> <div class="dropdown-menu" aria-labelledby="download"> <%= link_to "Edit Profile", edit_user_registration_path, class: 'dropdown-item' %> <div class="dropdown-divider"></div> <%= link_to "Log Out", destroy_user_session_path, method: :delete, class: 'dropdown-item' %> </div> </li> <% end %> </ul> </div> </nav> </div>
按上面的步骤排查,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者user7773475

