Rails5.2.6+Bootstrap5.2:编辑按钮跳转无效页面而非弹出模态框的修复
问题描述
在Rails 5.2.6 + Bootstrap 5.2环境下,两个页面的编辑按钮表现不一致:一个能正常弹出编辑模态框,另一个会跳转到不存在的页面。
正常按钮代码
<%= link_to icon('fas', 'pen'), edit_task_path(task, redirect_to: tasks_url(view: params[:view])), title: 'Editar', remote: true, class: "px-1" %>
调试结果
(byebug) tasks_url(view: params[:view])
"http://localhost:3000/tasks?view=table"
(byebug) params
<ActionController::Parameters {"group_by"=>"task_category_html",
"view"=>"table", "controller"=>"tasks", "action"=>"index",
"default_date"=>Thu, 07 Dec 2023} permitted: false>
异常按钮代码
<%= link_to edit_task_path(task, redirect_to: tasks_url(view: params[:view])), remote: true, class: 'btn btn-outline-primary' %> <span class="fas fa-pen" aria-hidden="true"></span> Editar <% end %>
调试结果
(byebug) tasks_url(view: params[:view]) "http://localhost:3000/tasks?view=table" (byebug) params <ActionController::Parameters {"group_by"=>"task_category_html", "view"=>"table", "controller"=>"tasks", "action"=>"index", "default_date"=>Thu, 07 Dec 2023} permitted: false>
问题原因
异常按钮的link_to语法错误:使用了块结束标签<% end %>,但没有用do开启块结构。这会导致生成的HTML结构混乱,Rails UJS无法正确识别remote: true属性,从而没有触发AJAX请求,转而执行了普通的页面跳转。
修复方案
将异常按钮的link_to改为正确的块写法:
<%= link_to edit_task_path(task, redirect_to: tasks_url(view: params[:view])), remote: true, class: 'btn btn-outline-primary' do %> <span class="fas fa-pen" aria-hidden="true"></span> Editar <% end %>
额外验证点
- 确认页面已正确引入Rails UJS(
application.js中包含//= require rails-ujs) - 检查
edit动作的控制器已配置响应AJAX请求(比如包含respond_to :html, :js,且存在对应的edit.js.erb视图文件)
内容的提问来源于stack exchange,提问作者Wallace Nascimento
相关产品推荐
相关产品推荐

