问题描述
我们目前正在努力将我们的网络应用搜索引擎从 Stimulus 更改为 Turbo。
然而,我们不断从我们的脚本中收到一个 HTML 请求而不是 Turbo 请求,并出现错误:“
ActionController::UnkNownFormat “.
Trying to force the request into the Turbo format give the following error :
“ ActionController::UnkNownFormat - SearchController#search is missing a template for this request format and variant.
request.formats: ["text/html"]
request.variant: []: “
我们使用的是 7.0.0-beta.5 Turbo 版本。
查看
<h1>All Apps</h1>
<%= turbo_frame_tag "record" do %>
<%= form_with url: "/search",method: :get,data: { controller: "search" } do |form| %>
<%= form.text_field :search,data: { action: "input->search#findResults" } %>
<% end %>
<% end %>
<%= turbo_frame_tag "apps" do %>
<ul>
<% @apps.each do |app| %>
<%= content_tag :li,app.name %>
<% end %>
</ul>
<% end %>
<turbo-stream action="update" target="apps">
<template>
<ul>
<% @apps.each do |app| %>
<%= content_tag :li,app.name %>
<% end %>
</ul>
</template>
</turbo-stream>
class SearchController < ApplicationController
def search
@apps = ItunesConnect::App.where("name like ?","#{params[:search]}%")
respond_to do |format|
format.turbo_stream
#format.html { redirect_to root_url(search: params[:search]) } #for testing
end
end
end
有什么建议吗?
解决方法
我可能刚刚遇到了类似的问题。我认为您需要将 format: :turbo_stream
指定为 form_with
的选项之一。就我而言,我想点击 HTML 块,但表单一直点击 turbo_stream。
为了更清楚,这个
<%= form_with url: "/search",method: :get,data: { controller: "search" } do |form| %>
变成这样
<%= form_with url: "/search",data: { controller: "search" },format: :turbo_stream do |form| %>
,
刚遇到同样的问题:带有 method: :get
的表单不会发送带有 TURBO_STREAM
格式的请求(它是 HTML
)。
Aidan 的回答几乎是正确的 - format: :turbo_stream
应该明确指定。它不应该是一个参数的哈希元素,而是一个 URL 的参数,像这样:
<%= form_with URL: search_path(format: :turbo_stream),data: { controller: "search" } do |form| %>