不再发送 Turbo_stream 格式

问题描述

我们目前正在努力将我们的网络应用搜索引擎从 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| %>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...