データが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わかりやすいプログラミング用語サイト