🦮

Rails turbo_stream.update(Hotwire)の使い方 (自己学習記録)

2024/11/03に公開

HotwireはRails向けに作成されたJavascriptなしで動的に動くサイトを作成することができる技術です。
様々な機能があるが、今回はTurbo機能のturbo_stream.updateの使い方を簡単に解説します。

Turboとは

Turbo Streamsと呼ばれる部分を介して動作し、小さなHTML**スニペット**を
WebSocketで直接ページに送信する。

  • スニペットとは 小さなソースコードやテキストの断片をさす
  • WebSocketとは Webブラウザとサーバーで双方向の通信を可能にするプロトコル
    HTTPと異なりリアルタイム制が高く、チャットやオンラインゲームで使用される

具体的な使用方法

今回はRailsチュートリアルで学習したボタンのカウントの更新を例とする。

  1. コントロ=ラーをTurbo Streamsのリクエストに応答させる
def create
 @user = User.find(params[:followed_id])
 current_user.follow(@user)
 respond_to do |format|
   format.html { redirect_to @user }
   format.turbo_stream
 end
end

respond_toメソッドはリクエストのフォ=マットに応じて異なる応答を返すことができる。
format.html { redirect_to @user}はTurboのリクエストに応答するものが無い場合に
動作する。
format.turbo_steamは
<アクション名>.turbo_stream.erbを探索する。
そのため、 create.turbo_stream.erbを作成すれば、自動的にHTMLが表示される。

  1. turbo_stream_update
    turbo_stream_updateメソッドとは?
    CSS idを受け取り、そのidに対応する要素を、メソッドに渡されたERBのブロックを評価した結果で
    置き換える。
    具体例としては下記の通り
<%= turbo_stream.update "follow_form" do %>
  <%= render partial: "users/unfollow" %>
<% end %>

上記のケースでは"follow_form"というCSS idを"render partial: "users/unfollow"に
置き換えている。

これによりページ全体を更新せず、特定の部分のみを更新することができる!

引用 Railsチュートリアル第14章より

Discussion