Rails DM機能その3の続きです。
開発環境
Mac
Ruby 2.6.5
Rails 6.1.3.2
rooms/show.html.erb
<% if @user.id != @current_user.id %>・・1
<% if @isRoom == true %>・・2
<p><a href="/rooms/<%= @roomId %>">チャットへ</a>・・3
<% else %>・・4
<%= form_for @room do |f| %>・・5
<%= fields_for @entry do |e| %>・・6
<%= e.hidden_field :user_id, :value=> @user.id %>
<% end %>
<%= f.submit "チャットを始める" %>
<% end %>
<% end %>
コードの解説
1・・現在ログインしているユーザーではないという条件をつけます。
2・・@isRoomを使用してチャットルームが作成している時と作成されていない時で条件を分岐させます。
3・・@isRoomがtrueの時、つまりチャットが既にある時は、チャットへボタンを出現させ、すでに作成されたチャットへと移行させます。
4・・falseの場合にはform_forを使って、コントローラにパラメーターを送るための記述をします。
レコードには、親モデルのRoomsテーブルと、子モデルのEntriesテーブル両方に保存する必要があるので、
5・・親モデルにform_forインスタンス変数
6・・子モデルにfields_forインスタンス変数とします。
Entriesテーブルのレコードにはuser_idを送る必要があるので、hidden_fieldで@user.idをvalueにおきます。
これで、roomsテーブルに保存されるための準備が整いました。
参考記事
RailsでややこしいDM機能を1万字でくわしく解説してみた
RailsでDM(ダイレクトメッセージ)を送れるようにしよう