Railsで最新のレコードをx件取得する方法
April 10, 2022
こんにちは、たわらです。
個人開発をしていて、Rails で最新のレコードをx件取得する方法ってどうやるんだっけ? と一瞬迷ってしまったので、恥ずかしいけれどメモとして残します。
def index
@latest_works = Work.order(created_at: :desc).limit(5)
end
irb(main):019:0> @latest_works = Work.order(created_at: :desc).limit(5).pluck(:id)
Work Pluck (17.9ms) SELECT "works"."id" FROM "works" ORDER BY "works"."created_at" DESC LIMIT $1 [["LIMIT", 5]]
=> [11, 10, 9, 8, 7]
created_at
で作成順に並び替えて、後ろから 5 件取得すればいいですね。
ちなみにlast
を使っても最新の 5 件を取得できますが、id が昇順になってしまいます。
last で呼び出すと配列で返ってくるので、さらにメソッドチェーンを組む必要がありそうです。
どうやってやるんだろう、、、
def index
@latest_works = Work.last(5)
end
irb(main):020:0> @latest_works = Work.last(5).pluck(:id)
Work Load (2.7ms) SELECT "works".* FROM "works" ORDER BY "works"."id" DESC LIMIT $1 [["LIMIT", 5]]
=> [7, 8, 9, 10, 11]
別のもっとよい書き方がありそうな予感、、、
参考文献