データが1件でもあるかチェックする

exists?

指定した条件のレコードがデータベースに存在するかどうかを真偽値で返すメソッドです。存在すればtrueを存在しなければfalseを返します。

1件でもあればtrueを返す

オブジェクト.exists?(条件)  

例:

 > User.exists?
  User Exists (3.0ms)  SELECT  1 AS one FROM "users" LIMIT $1  [["LIMIT", 1]]
=> true

条件つき

User.exists?(id: [1, 2, 3], name: 'opiyo', role: 'admin')
今回の自身のコード

今回はusers#indexで条件付きでexists?の返り値を@post_userに代入し、viewのif分岐の条件に記述しました
* 条件分岐

<if ログインしているか>

  <if ログインしたユーザーの投稿があるか>
     <if  ログインしたユーザーの投稿>
      //ユーザーの投稿内容のみ表示
  <end>
  <else>
         //ログインユーザーの投稿がない
       hogeさんの投稿がありません
         //全てのユーザーの投稿内容表示
  <end>

<else>
     ログインしてません
    //全てのユーザーの投稿内容表示
<end>

実際のコード

<% if user_signed_in? %>
    <% if @post_user %> //コントローラからtrueまたはfalseを受け取る
      <% @posts.each do |post| %>
          <% if post.user_id == current_user.id %>
            
            <div class="post_wrap">
              <div class="card">
                <div class="article_card">
                  <%= link_to "タイトル:「#{post.title}", post_path(post.id), class: :card__title %>
                  
                  <ul class="tag">
                    <li class="tag_ribbon">
                      <%post.tags.each do |tag| %>
                        #<%=tag.name%>
                      <% end %>
                    </li>
                  </ul>
                  <div class="status">
                    <%= post.status.name%>
                  </div>

                  <%= link_to image_tag(post.image, class: :card__img), post_path(post.id) %>
                  <div class="date">
                    <div class="image-month">12</div>
                    <div class="image-year">2020</div>
                  </div>
                </div>
              </div>
            </div>
          <% end %>
        <% end %>
        
    <% else %>
      <p>まだ投稿していません</p>
        <h1>みんなの投稿</h1>
    <% end %>  
  <% else %>
    <%# ログインしていない %>
    <h1>みんなの投稿</h1>
  <% end %>
  • コントローラー
//users_controller
class UsersController < ApplicationController

  def index
    @posts = Post.all.order(created_at: :desc)
    @post_user = Post.exists?(user_id: current_user.id) //trueまたはfalseを代入
  end

end

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update]

//-----------------------------------------------------------

//users_controller
  def index
    @posts = Post.all.order(created_at: :desc)
  end
end

【Rails】exists?メソッドの使い方(基礎~応用編,prese | Pikawaka - ピカ1わかりやすいプログラミング用語サイト