Rails: турбо-кадр с запрошенным src интерпретируется как format.html
Я заметил это странное поведение ленивой загрузки турбо-кадров через
src
настройка атрибута:
nav
= turbo_frame_tag 'primary_menu', src: primary_menu_path
: def primary_menu
: respond_to do |format|
: format.turbo_stream
> : format.html { binding.pry ; render plain: 'should not reach this block' }
: end
: end
)> turbo_frame_request?
=> true
По какой-то причине он интерпретируется как обычный запрошенный html-запрос, хотя
turbo_frame_request?
возвращает =>
true
. Что вызывает это и как это исправить?
PS
primary_menu.turbo_stream.slim
существует для этого действия контроллера.
Локальные версии:
hotwire-rails 0.1.3
@hotwired/turbo-rails 7.0.0-beta.5
2 ответа
Before someone with better knowledge of
turbo
internals explains it properly, below is a method that worked for me:
<%= turbo_frame_tag 'primary_menu', src: primary_menu_path %>
Would be interpreted as HTML request:
def primary_menu
# load your thing
respond_to do |format|
format.html
end
end
in your
primary_menu.html.erb
make sure you wrap your content with
<%= turbo_frame_tag 'primary_menu' do %>
block.
Keep in mind that:
- names have to match here and its original definition/require.
- any additional
turbo_frame_tag
wrapped blocks in that response would be silently ignored.
Это ожидаемое поведение, как указано в документации Turbo.
По умолчанию Turbo не добавляет тип MIME text/vnd.turbo-stream.html при отправке ссылок или форм с типом метода GET.
Чтобы переопределить это поведение:
Чтобы использовать ответы Turbo Streams с запросами GET в приложении, вы можете указать Turbo включить тип MIME, добавив атрибут data-turbo-stream в ссылку или форму.
также есть ответ Здесь
Причина этого в том, что для запросов GET более разумно использовать турбо- кадр , а не потоковую передачу .