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