過去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件のレコードを取得してくるというものです。