Turbo Streams を学ぶ
基本
以下のように Turbo Streams なレスポンスを返すと、指定した id(この例だと id="messages"
) の要素に対してストリームアクション(この例だと prepend)できます。
指定したDOMだけに変更を加えることができるので、よりSPAっぽくなります。
ストリームアクションに使うHTML片を生成するために、部分テンプレートが使用できます。
( partial: 'messages/message', locals: { message: message }
のところ)
def create message = @room.messages.create!(message_params) render turbo_stream: turbo_stream.prepend(:messages, partial: 'messages/message', locals: { message: message }) end
ストリームアクションは5種類ある
ストリームアクションは以下の5種類があります。
- append:後尾に追加する
- prepend:先頭に追加する
- replace:DOMごと置換する
- update:DOMのコンテンツを更新する
- remove:削除する
xxxxx.turbo_stream.erb を使う書き方もある
コントローラに書かずに別にファイルを用意することもできます。
↓ app/controllers/messages_controller.rb
def create @room.messages.create!(message_params) end
↓ app/views/messages/create.turbo_stream.erb
<%= turbo_stream.prepend 'messages' do %> <%= render partial: 'messages/message', locals: { message: @message } %> <% end %>
一度に複数のストリームアクションが動くようにもできる
以下のように、一度に複数のストリームアクションが動くようにもできます。
<%= turbo_stream.remove 'new_message' %> <%= turbo_stream.prepend 'messages' do %> <%= render partial: 'messages/message', locals: { message: @message } %> <% end %>