🦮
Rails turbo_stream.update(Hotwire)の使い方 (自己学習記録)
HotwireはRails向けに作成されたJavascriptなしで動的に動くサイトを作成することができる技術です。
様々な機能があるが、今回はTurbo機能のturbo_stream.updateの使い方を簡単に解説します。
Turboとは
Turbo Streamsと呼ばれる部分を介して動作し、小さなHTML**スニペット**を
WebSocketで直接ページに送信する。
- スニペットとは 小さなソースコードやテキストの断片をさす
- WebSocketとは Webブラウザとサーバーで双方向の通信を可能にするプロトコル
HTTPと異なりリアルタイム制が高く、チャットやオンラインゲームで使用される
具体的な使用方法
今回はRailsチュートリアルで学習したボタンのカウントの更新を例とする。
- コントロ=ラーを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が表示される。
- 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