Rails: Turbo Stream Broadcast не обновляет вид

У меня есть Turbo Stream, который не обновляет представление, и я не знаю, почему. У меня есть две другие настройки трансляции в аналогичной конфигурации, которые работают нормально.

Судя по тому, что я вижу, все выглядит так, как будто оно должно работать, я просто не получаю обновление на интерфейсе. Я упускаю что-то очевидное?

      # partial
<%= turbo_stream_from 'team_players' %>
<div id="players_<%= dom_id(team)%>"
    <% team.players.each do |player| %>
        <%= render player %>
    <% end %>
</div>
      # player model
class Player < ApplicationRecord
belongs_to :team

    after_create_commit  do
        broadcast_prepend_to(
            'team_players',
            target: "players_team_#{team.id}",
            locals: { player: self }
        )

    end
end
      # server log
Started GET "/cable" for 127.0.0.1 at 2022-02-16 11:45:13 +0000
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2022-02-16 11:45:13 +0000
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: keep-alive, Upgrade, HTTP_UPGRADE: websocket)
Turbo::StreamsChannel is transmitting the subscription confirmation
Turbo::StreamsChannel is streaming from team_players

      # console log after manually creating a player for team 9 (exert)
...
 Rendered players/_player.html.erb (Duration: 0.3ms | Allocations: 99)
[ActionCable] Broadcasting to team_players: "<turbo-stream action=\"prepend\" target=\"players_team_9\"><template><div id=\"player_1885\">\n  <p>\n    <strong>ID:</strong>\n    1885\n  </p>\n\n  <p>\n    <strong>User:</strong>\n    3820748f-d9d3-400e-ac90-6149800a0e68\n  </p>\n\n  <p>\n    <strong>Team:</strong>\n    9\n  </p>\n\n  <p>\n   ...
=> 
#<Player:0x00007fba5fa12568
...

Любая помощь или указатели приветствуются!

2 ответа

Похоже, я пропустил шаг 4 в процессе установки turbo-rails: https://github.com/hotwired/turbo-rails#installation

После запуска: ./bin/rails turbo:install:redisвсе работало из командной строки.

Без этого шага все еще работало из отдельного сеанса браузера.

Спасибо Дэвиду Колби в Твиттере за найденное исправление.

  • использование turbo_frame_tag вместо div
        <%= turbo_frame_tag "team" do %>
     <% team.players.each do |player| %>
        <%= render player %>
    <% end %>
  <% end %>

  • Турбопотоки доставляют изменения страницы в виде фрагментов HTML, заключенных в самоисполняющиеся элементы.
Другие вопросы по тегам