0
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]フォローしたユーザーの直近1週間の投稿のみ表示させる→[修正]一部追記しました

Last updated at Posted at 2021-09-01

はじめに

本日は、過去にフォロー機能を実装していたので、
せっかくなので、アプリケーションっぽくトップページには、
フォローしているユーザーのみの投稿を表示させるようにしました。

コード

コントローラー

  def index
    @foods = Food.order("created_at DESC").where(user_id: [current_user.id,*current_user.following_ids])
    @like = Like.new
    @ranks = Food.find(Like.group(:food_id).order('count(food_id) desc').limit(5).pluck(:food_id))
  end

ビューは特に見せるところはないので割愛します。
eachメソッド使ってとりあえずまずは全部の投稿を出すようにすれば良いと思います。

order("created_at DESC")
新しい投稿が上になるように設定。

where(user_id: [current_user.id,*current_user.following_ids])
フォローしているユーザーのみと言いながら、
自分の投稿も見れるようにしています。
current_user.idを消せばいいと思います。

【Rails】 whereメソッドを使って欲しいデータの取得をしよう!
whereメソッドについては、これを見れば秒で理解できます。

whereメソッドとは、テーブル内の条件に一致したレコードを配列の形で取得することができるメソッドです。

*可変長引数と呼ばれています。

Rubyにおける可変長引数の使い方を現役エンジニアが解説【初心者向け】
メソッドの引数にアスタリスク
キーワード引数とオプション引数についてまとめてみた

可変長引数とは個数に制限を設けていない引数のことで、その引数は配列として認識されることとなります。
配列ですから、いくあっても良いってことになります。

要するに、制限をおらずフォローしているユーザーを全て取ってくるという認識ですね。

@foods = Food.order("created_at DESC").where(user_id: [current_user.id,*current_user.following_ids]).limit(10)

.limit(10)をつけたら、最新の10件のみ表示するなど考えましたが、
フォローするユーザーが増えれば増えるほど意味を為さなくなるので、
消しました。

と、色々考えた結果、本題にもある通り、
フォローしたユーザーの直近1週間の投稿のみ表示させることにしました。
冗長かもしれないですが、ご了承ください。

  def index
    to = Time.current.at_beginning_of_day
    from = (to - 1.week)
    @foods = Food.order("created_at DESC").where(user_id: [current_user.id,*current_user.following_ids]).where(created_at: from...to)
    @like = Like.new
    @ranks = Food.find(Like.group(:food_id).order('count(food_id) desc').limit(5).pluck(:food_id))
  end

Rails(ActiveRecode)で一週間分のレコードを取得する

追記

後日改めて画像を投稿してみたところ、自分が投稿したものが、
反映されておりませんでした。
???となり、先日投稿したものは確認ができます。
rails cをしてTime.current.at_beginning_of_dayを確認してみたところ、
今日の0時0分0秒となっておりました。
しかし、実際に投稿した時間は、今日の13時30分頃です。
これでは、今日の0時0分0秒から1週間前までということになるので、
当然、投稿したものは反映されません。

以下、修正したコードです。

to = Time.current.at_beginning_of_day

to = Time.current

to = Time.current現時刻に修正しました。
以上、よろしくお願いします!

終わりに

記事を投稿していましたが、
なんとなく微妙だなと思い、考えながら書いていたら、
直近1週間にしよう。という着地になりました。

調べ物をしていて思いましたが、
Railsドキュメント
知らないことだらけで、読んでて楽しいですね。

参考にしたサイトは、散らばして書きましたので、
参照ください。

明日も頑張ります!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?