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]

別のもっとよい書き方がありそうな予感、、、

参考文献