Rails员工查询页点击分页触发ActionController::UnknownFormat错误如何解决
问题根因
- 首次搜索走的是AJAX请求,格式为
js,匹配控制器仅有的format.js响应规则,运行正常 - will_paginate默认生成的分页链接是普通HTML GET请求,格式为
html,控制器没有对应响应规则,因此触发ActionController::UnknownFormat错误 - 新增
format.html后缺少对应search.html.erb模板,因此触发模板缺失报错 - 现有分页参数传递缺失搜索用到的
name参数,跳转分页后搜索条件会丢失
修复步骤
- 修正局部模板中的分页配置
给分页链接指定请求格式为js,同时补全搜索需要的name参数,修改后的分页代码如下:
<div role="navigation" aria-label="Page Navigation"> <%= will_paginate employees, params: { name: params[:name], search: params[:search], search_type: params[:search_type], fte_type: params[:fte_type], format: :js} %> </div>
新增的format: :js会让分页链接自动带上.js后缀,发起JS格式请求,匹配控制器的format.js规则。
- 补全控制器容错逻辑
给respond_to块添加HTML格式的 fallback 逻辑,避免用户直接访问搜索路径时报错,修改后的search方法代码如下:
def search @employees = Employee.active_name_search(params[:name]) .employee_locator_list .order(:lname, :fname) .paginate(page: params['page'], per_page: 15) respond_to do |format| format.js format.html { redirect_to employee_locators_path } # 非AJAX请求直接跳转回列表首页 end end
- 确认JS响应模板存在
确保路径app/views/employee_locators/search.js.erb存在,该模板用于将渲染后的搜索结果替换到页面对应的区域,示例内容如下(可根据实际页面DOM调整选择器和局部模板名称):
// 替换页面上的搜索结果容器内容 document.querySelector('.search-results-wrap').innerHTML = "<%= j render 'your_partial_template_name', employees: @employees %>"
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

