如何创建带最新Bootstrap与jQuery支持的Rails7.3.1项目及登录UI指导
Rails7.3.1 + 最新Bootstrap(无jQuery)配置及登录UI实现
一、Bootstrap文件存放位置
Rails7中手动下载的Bootstrap文件,推荐放在以下标准Asset Pipeline目录:
- CSS文件:将
bootstrap.min.css(及自定义主题CSS)放入app/assets/stylesheets/ - JS文件:下载包含Popper.js的Bootstrap打包文件
bootstrap.bundle.min.js(最新版Bootstrap已内置Popper,无需额外下载),放入app/assets/javascripts/
二、配置Rails加载Bootstrap
1. 加载CSS
- 若你的主样式文件是
application.css,重命名为application.scss(支持SCSS语法导入) - 修改
app/assets/stylesheets/application.scss,添加:
@import "bootstrap.min"; // 此处可添加自定义CSS规则
- 确保
config/initializers/assets.rb包含预编译配置:
Rails.application.config.assets.precompile += %w( bootstrap.min.css )
2. 加载JS
修改app/assets/javascripts/application.js,添加:
//= require bootstrap.bundle.min
同样在config/initializers/assets.rb中添加:
Rails.application.config.assets.precompile += %w( bootstrap.bundle.min.js )
三、创建登录UI页面
1. 生成登录控制器
执行命令生成Sessions控制器(处理登录逻辑):
rails generate controller Sessions new create destroy
2. 编写登录视图(app/views/sessions/new.html.erb)
用Bootstrap表单组件实现响应式登录页面:
<div class="container mt-5"> <div class="row justify-content-center"> <div class="col-md-6"> <div class="card shadow-sm"> <div class="card-header bg-primary text-white"> <h4 class="mb-0">用户登录</h4> </div> <div class="card-body"> <%# 禁用Turbo远程提交,确保表单正常提交 %> <%= form_with model: :session, url: sessions_path, method: :post, local: true do |form| %> <% if flash[:danger] %> <div class="alert alert-danger mb-3"> <%= flash[:danger] %> </div> <% end %> <div class="mb-3"> <%= form.label :email, class: "form-label" %> <%= form.email_field :email, class: "form-control", placeholder: "请输入注册邮箱", autofocus: true %> </div> <div class="mb-3"> <%= form.label :password, class: "form-label" %> <%= form.password_field :password, class: "form-control", placeholder: "请输入密码" %> </div> <div class="mb-3 form-check"> <%= form.check_box :remember_me, class: "form-check-input" %> <%= form.label :remember_me, "记住登录状态", class: "form-check-label" %> </div> <%= form.submit "登录", class: "btn btn-primary w-100" %> <% end %> </div> </div> </div> </div> </div>
3. 配置路由
修改config/routes.rb,添加登录相关路由:
get 'login', to: 'sessions#new' post 'login', to: 'sessions#create' delete 'logout', to: 'sessions#destroy'
4. 登录控制器逻辑(app/controllers/sessions_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]) log_in user # 处理"记住我"功能 params[:session][:remember_me] == '1' ? remember(user) : forget(user) redirect_to root_url, notice: "登录成功" else flash.now[:danger] = '邮箱或密码错误' render 'new', status: :unprocessable_entity end end def destroy log_out if logged_in? redirect_to root_url, status: :see_other end end
补充:ApplicationController中添加认证辅助方法
在app/controllers/application_controller.rb中添加以下方法,支持登录状态管理:
class ApplicationController < ActionController::Base helper_method :logged_in?, :current_user private 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 remember(user) user.remember # 需要在User模型中定义remember方法生成记住令牌 cookies.permanent.signed[:user_id] = user.id cookies.permanent[:remember_token] = user.remember_token end def forget(user) user.forget # 需要在User模型中定义forget方法重置令牌 cookies.delete(:user_id) cookies.delete(:remember_token) end def log_out forget(current_user) session.delete(:user_id) @current_user = nil end end
四、注意事项
- 若你的Rails项目使用Importmap或jsbundling/cssbundling,也可以通过npm安装Bootstrap,但手动下载文件到
app/assets更符合传统Asset Pipeline工作流 - 确保布局文件
app/views/layouts/application.html.erb包含样式和JS加载标签:<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
内容的提问来源于stack exchange,提问作者jissy
相关产品推荐
相关产品推荐

