LoginSignup
0
0

More than 3 years have passed since last update.

[過去POST][初心者向け]ページネーションの原理がわからない。railsにて

Posted at

過去POST

過去自分がTECH::CAMPのメンターをしていた時期にメモしていた内容を公開します。
rails でよしなにやってくれるので知らなくてもいいのですが、たまに聞かれることがあったので書きました。
初心者向けのざっくりとした解説です。

Q.ページネーションの原理がわからない。


class TweetsController < ApplicationController

  def index
    @tweets = Tweet.order("created_at DESC").page(params[:page]).per(5)
  end

  def new
  end

  def create
    Tweet.create(tweet_params)
  end

  private
  def tweet_params
    params.permit(:name, :image, :text)
  end

end

ここで

.page(params[:page]).per(5)

とありますが、これが納得できないという人がいました。

これもSQL文の発行に関わるものです。


# page(params[:page]).per(5)
params[:page]= 1

の場合SQLは(順番は一旦無視します。)


SELECT `tweets`.* FROM `tweets` LIMIT 5 OFFSET 0

ページが代わり


# page(params[:page]).per(5)
params[:page]= 2

の場合


SELECT `tweets`.* FROM `tweets` LIMIT 5 OFFSET 5

となります。
ここで重要なのが

LIMIT 5
OFFSET 5

です。

まず
LIMIT 5
は、データをmax5件まで取得するという意味です。

OFFSET 5
は、データを前から5件をスキップするという意味です。

つまり


SELECT `tweets`.* FROM `tweets` LIMIT 5 OFFSET 5

というのは、ツイートテーブルから、ツイートレコードを前から5件飛ばし、
その後最大5件のレコードを取得してくるというものです。

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