Формат 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

Какие-нибудь советы?

3 ответа

Просто столкнитесь с той же проблемой: форма с method: :get не отправляет запрос с TURBO_STREAM формат (это HTML).

Ответ Эйдана почти правильный - format: :turbo_streamследует указывать явно. Это должен быть не хэш-элемент аргумента, а параметр URL-адреса, например:

      <%= form_with URL: search_path(format: :turbo_stream), method: :get , data: { controller: "search" } do |form| %>

При определении маршрута вручную с помощьюget, например, вы должны указать формат по умолчанию следующим образом:

      get :search, to: 'search#index', defaults: { format: :turbo_stream }

Возможно, у меня была похожая проблема. Думаю нужно уточнить format: :turbo_stream как один из ваших вариантов form_with. В моем случае я хотел попасть в блок HTML, но вместо этого форма продолжала попадать в turbo_stream.

Чтобы быть более ясным, это

      <%= form_with url: "/search", method: :get , data: { controller: "search" }  do |form| %>

становится этим

      <%= form_with url: "/search", method: :get , data: { controller: "search" }, format: :turbo_stream  do |form| %>
Другие вопросы по тегам