発言(post)をroleカラムを使い分ける

##トークルームにて発言を分ける際にやった事のメモです。

今回作ったのが、自作自演でLINEのようなチャットルームにて一人で交互に発言出来るアプリです。
その際にやった事は、roleカラムを作り

・role 0　なら Aさん
・role 1　なら Bさん

と分ける事で実装しました。

##では実際にコードなどをみていきましょう。


まず発言を投稿するformです。 

memo_room_idに紐づいた、memo_room_postとなるように、
memo_room_idを取れるようにmemo_room_postをルーティングでネストしてあります。

def new
    @memo_room = MemoRoom.find(params[:memo_room_id])  
    @memo_room_post = MemoRoomPost.new   
    @memo_room_posts = @memo_room.memo_room_posts  MemoRoomインスタンスのデータに紐づいた、memo_room_postsのデータ
    @memo_room_post.memo_room_id = @memo_room.id　上記にmemo_room_idの値を入れてあげます。
  end

```
<%= form_with(model: @memo_room_post, url: memo_room_memo_room_posts_url(@memo_room), local: true) do |f| %>
        <%= render 'layouts/error_messages', model: f.object %>
          <div class="form-group">
            <%= hidden_field_tag :memo_room_id, @memo_room.id %>
            <%= f.text_area :content, class: 'form-control chat-form', placeholder: "メモの内容を入れて投稿してください" %>
          </div>
          <%= button_tag :type => "submit", :class =>"btn btn-default btn-s-md" do %><i class="fas fa-paper-plane"></i>
          <% end %>
    <% end %>  
    </div>
  <% else %>
```

##ここからが今回のお話の中心です。
role分けをする際の主となる部分です。

```
def create
    @memo_room_post = current_user.memo_room_posts.build(memo_room_post_params)
    @memo_room = MemoRoom.find(params[:memo_room_id])
    @memo_room_post.memo_room_id = @memo_room.id
    #@memo_roomを使い、紐づいたMemoRoomPostインスタンスの最後の発言データを取得
    @lastpost = @memo_room.memo_room_posts.last
    
    if @lastpost == nil  #MemoRoomに紐付いたMemoRoomPostの最後のデータ がnilなら
      @memo_room_post.role = 0 #memo_room_postのrole　を 0　にする。　開始位置 role 0
    elsif @lastpost.role == 0 #MemoRoomに紐付いたMemoRoomPostの最後のデータのroleの値が0なら
      @memo_room_post.role = 1   #memo_room_postのrole の値を 1にする。
    elsif @lastpost.role == 1  ##MemoRoomに紐付いたMemoRoomPostの最後のデータのroleの値が 1なら
      @memo_room_post.role = 0  #memo_room_postのroleの値を 0にする。
    end
```

まずはconsoleにて・・・試すのですが。貼れるものがないので簡単に。
user = User.first
category = Category.first
@memo_room = user.memo_rooms.build(title: 'a', category_id: category.id)  カテゴリとメモルームが紐づいてます。
@memo_room_post = current_user.memo_room_posts.build(content: 'a', memo_room_id: @memo_room.id)

こんな感じで@memo_room_post作ります。ルームのidは直接コンソールでは入れ込みます。

そして、@lastpost(わかりやすく変数名しただけに) = @memo_room.memo_room_posts.last

MemoRoomに紐づいたMemoRoomPostの最後の発言データを取得します。

トークルームの中で発言がない場合は当然nilになります。なので・・・

@lastpost == nil   最後の発言データがなくnilであるなら
@memo_room_post.role = 0　　　roleの値を0に。

以下略　上記のコード参照


これで、発言がない場合、roleが0の場合 roleが1の場合の記載が出来ました。

 <% if memo_room_post.role == 0 %>

そしてview側では、roleの値　が一致するかしないかで、発言を分けるIF文を使い、表示分けを行いました。
実際のコードです。

 ```
html.erb

<div class="line-bc col-sm-12">
  <!-- タイトル -->
    <div class="line__title">
      ルーム名：<%= @memo_room.title %>  
    </div>
  <% @memo_room_posts.each do |memo_room_post| %>  
    <% if memo_room_post.role == 0 %>　ここ　←  --------
      <div class="col-sm-12 balloon6">
        <div class="faceicon">
          <%= image_tag current_user.post_a_picture.to_s %>
        </div>
        <div class="chatting">
          <div class='says'>
            <p><%= memo_room_post.content %></p>
          </div>
        </div>
      </div>
    <% elsif memo_room_post.role == 1 %> 　　ここ←  -------
    <div class="offset-sm-6 col-sm-6 mycomment">
      <div class="faceicon">
        <p><%= memo_room_post.content %></p><%= image_tag current_user.post_b_picture.to_s %>
      </div>
    </div>
    <% end %> 
  <% end %>
```

メモ書きなので、省略してるところも多いと思いますが、似たような事をする際に
役に立てばと思います。以上