私は今railsでチャットアプリを作っており、current userのメッセージは右側に表示、相手のメッセージは左側に表示、とそれぞれ配置を分けるために@idと@message.from_id(メッセージ送信者)を読み取ってその処理をjavascriptにさせています。もしイコール(@id = @message.from_id)であれば右側に配置させるという処理です。
そこで問題なのですが@idというインスタンス変数をjavascriptに渡しているのですが、一番最初のチャット開始の時(最初のメッセージ送信時)だけcurrent_user_idがnilになります。それ以後はリロードしたりすると値が渡されています。
どのように解決すればよいのでしょうか?
ruby
1#controller 2def show 3 @id = current_user.id 4 @user = User.find(params[:id]) 5 @room_id = message_room_id(current_user,@user) 6 @messages = Message.recent_in_room(@room_id) 7end
ruby
1#show.html.erb view 2.... 3<section class="message_box" id="po"> 4 <div id="messages" class="msg_box p-4 rounded"> 5 <%= render @messages %> 6 </div> 7</section> 8....
ruby
1#_message.html.erb 2 3<div class="message"> 4 <% user = User.find_by(id: message.from_id) %> 5 <p class="<%= message.id %> px-2 mb-1" id="message_sender" ><%= user.profile.username %></p> 6 <p class="<%= message.id %> p-3 border rounded received" id="message_content"><%= message.content %></p> 7 8 <script type="text/javascript"> 9 var from_id = <%= message.from_id %>; 10 var current_user_id = <%= raw @id %>; #ここのcurrent_user_idが一番最初のチャットの時だけnilになっている。 11 12 if(from_id == current_user_id){ 13 $('p.' + <%= message.id %>).css('text-align', 'right'); 14 $('p.' + <%= message.id %>).css('margin-left', 'auto'); 15 }else{ 16 $('p.' + <%= message.id %>).css('text-align', 'left'); 17 $('p.' + <%= message.id %>).css('margin-right', 'auto'); 18 } 19 </script> 20 21</div>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。