前置き
exists?じゃダメなの????
適当に知っているメソッドを入れているとpresent?だと問題なく稼働した。理由がわからなかったので、2つのメソッドになんの違いがあるか調べてみた。
目的
- 2つの違いをはっきりさせる
1.結論
- データベースからデータを取得する前か後かで違う
- データベースから取得した値が文字列か配列か又は存在するかで違う
exists?
データベースからデータを取得する前に、データが存在しているかどうか
present?
データベースからデータを取得した後、条件に該当したデータの存在を調べるとき
2. 原因
実際に初めに挙げた例では@today_ranksには配列でデータを渡していたので、present?で正常に稼働しました。
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ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。