はじめに
本日は、過去にフォロー機能を実装していたので、
せっかくなので、アプリケーションっぽくトップページには、
フォローしているユーザーのみの投稿を表示させるようにしました。
コード
コントローラー
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ドキュメント
知らないことだらけで、読んでて楽しいですね。
参考にしたサイトは、散らばして書きましたので、
参照ください。
明日も頑張ります!