2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]exists?メソッド、present?メソッド、presenceメソッドについて勉強してみた![初心者]

Last updated at Posted at 2020-11-24

#それぞれの違い
exists?メソッド
指定した条件のレコードがデータベースに存在するかどうか、真偽値で返すメソッド
present?メソッド
レコードの存在確認を行った後に、インスタンスを使って何か処理をしたい時に使用するメソッド
presenceメソッド
オブジェクトが存在すればそのオブジェクトを返し、オブジェクトが存在しなければnilを返すメソッド

#exists?メソッド

基本構文
オブジェクト.exists?(条件)

exists?メソッドの引数に条件を指定すると、条件にマッチするレコードがあればtrueを返し、レコードがなければfalseを返します。

###指定したidのレコードを確認する方法

pry(main)> User.exists?(1)
=> true

###指定した条件のレコードを確認する方法
exists?メソッドの引数にハッシュ(カラム名: '値')を渡します。

pry(main)> User.exists?(name: '田中')
=> true

###whereメソッドと併用する方法

pry(main)> User.where(name: '田中').exists?
=> true

#present?メソッド

基本構文
オブジェクト.present?

present?メソッドを使用したオブジェクトが存在すればtrueを返し、存在しなければfalseを返すメソッドです。
非常にexists?メソッドと似通っていて、混乱しそうですね。
使い分けとしては、if文など条件分岐をプログラムで書くときには使われることが多いです。

###使用例

app/views/users/index.html.erb
<% if  @users.present? %>
  <%  @users.each do |user| %>
    <%= user.name %>
<% else %>
    <div>ユーザーなし</div>
  <% end %>
<% end %>

#presenceメソッド

基本構文
オブジェクト.presence

presenceメソッドを使用したオブジェクトが存在すればそのオブジェクト自身を返し、存在しなければnilを返すメソッドです。
presenceメソッドはRailsのメソッドなので、Rubyで使おうとすると、エラーが出ます。

###使用例

app/model/user.rb
class User < ApplicationRecord
  def call
    name.presence || 'No Name'
  end
end
app/controller/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.call
  end
end
app/views/users/show.html.erb
<%= @user %>

このように記載すると、@userのnameに値があればその値が表示され、なければ “No Name” と表示されます。

#おわりに
とてもややこしいですね。
自分でまとめておきながら、混乱しています。
徐々に使っていって、手で覚えるしかないですね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?