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

Rails报错ActionController::UnknownFormat,Ajax表单请求无对应模板排查

解决ActionController::UnknownFormat错误的方案

以下是几个关键修复点,按优先级排序:

1. 修正控制器的参数获取逻辑

由于你用了model: @shopping创建表单,提交的参数会被嵌套在shopping命名空间下,直接取params[:date_start]会拿到nil,同时导致后续逻辑异常。修改控制器代码:

def search_by_dates
  @date_start = params[:shopping][:date_start]
  @date_end = params[:shopping][:date_end]
  @shoppings = Shopping.where(date_shopping: @date_start..@date_end)
  respond_to do |format|
    format.html { redirect_to shoppings_path } # 处理非AJAX场景的降级逻辑
    format.js
  end
end

注意:建议把控制器动作名改成蛇形命名search_by_dates,这是Rails的约定,避免驼峰带来的模板匹配问题。

2. 匹配动作名的模板文件命名

Rails模板文件需要和控制器动作名保持蛇形命名一致,把你的searchByDates.js.erb重命名为search_by_dates.js.erb,放在app/views/shoppings/目录下。

3. 修正路由定义

更新routes.rb的路由规则,匹配蛇形动作名,并默认指定JS格式:

post 'shoppings/search_by_dates', defaults: { format: 'js' }
# 或者用RESTful集合路由的写法:
# resources :shoppings do
#   post :search_by_dates, on: :collection, defaults: { format: 'js' }
# end

4. 修正表单的字段属性和URL

表单里的date_field属性写错了,把attribute: 'date'改成type: 'date',同时更新表单的url指向蛇形动作名:

<%= form_with model: @shopping, url: { action: "search_by_dates" }, remote: true do |form| %>
  <div class="form-group">
    <%= form.label :date_start %>
    <%= form.date_field :date_start, type: 'date' %>
    <%= form.label :date_end %>
    <%= form.date_field :date_end, type: 'date' %>
  </div>
  <div class="form-group">
    <%= form.submit "Cerca", class: 'btn btn-primary' %>
  </div>
<% end %>

5. 验证请求头(可选)

在浏览器开发者工具的Network标签中,查看提交的请求是否包含Accept: text/javascript请求头——remote: true的表单应该自动添加这个头,如果没有,检查是否引入了Rails的UJS脚本(//= require rails-ujs在application.js中)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:02:04