0
0

More than 3 years have passed since last update.

【Ruby on Rails】exists?とpresent?って何が違うの???

Last updated at Posted at 2021-09-01

前置き

ランキング機能を実装中
スクリーンショット 2021-09-01 8.49.56.png

サーバー立ち上げたら下記の箇所で怒られた
スクリーンショット 2021-09-01 8.50.52.png

exists?じゃダメなの????

適当に知っているメソッドを入れているとpresent?だと問題なく稼働した。理由がわからなかったので、2つのメソッドになんの違いがあるか調べてみた。

目的

  • 2つの違いをはっきりさせる

1.結論

  • データベースからデータを取得する前か後かで違う
  • データベースから取得した値が文字列か配列か又は存在するかで違う
exists?

データベースからデータを取得する前に、データが存在しているかどうか

present?

データベースからデータを取得した後、条件に該当したデータの存在を調べるとき

2. 原因

実際に初めに挙げた例では@today_ranksには配列でデータを渡していたので、present?で正常に稼働しました。

ranks_controller.rb
  def rank
    @today_post_ranks_user = Article.group(:user_id).where(created_at: Time.current.all_day).order('count(user_id) desc').limit(10).pluck(:user_id) # 今日投稿した記事
    @today_ranks = []
    @today_post_ranks_user.each do |user_id|
      @today_ranks.push({
        "user" => User.find(user_id),
        "count" => Article.where(created_at: Time.current.all_day).where(user_id: user_id).count,
      })
    end
end

ちなみに!blank?も同じ意味になり、正常に動きました。

参照

nil? empty? blank? present? exists? メソッドを状況に応じて使い分けよう[Rails]

投稿者コメント

適当に書いてたらなんか動いた
じゃなくて、ここではこういう使い方があってこうだから動いたんだ!
とちゃんと理由がわかるように勉強していきます!

My Profile

プログラミング学習歴3ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。 

0
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
0
0