【Rails4】kaminariをAPIで利用する
ページネーション用Gemで有名なkaminari。
ただ、使い方を調べてもAPIでの利用方法が見つからなかったので記載。
下記Gem導入済み
・kaminari
・active_model_serializers
modelの出力フォーマットをactive_model_serializersを利用して設定
./app/serializers/todo_serializer.rb
class TodoSerializer < ActiveModel::Serializer attributes :id, :body, :memo, :complete, :user_id end
kaminariの共通設定ファイルを定義
config/initializers/kaminari_config.rb
Kaminari.configure do |config| config.default_per_page = 7 #最大項目数 # config.max_per_page = nil #最大数/page # config.window = 4 # config.outer_window = 0 # config.left = 0 # config.right = 0 # config.page_method_name = :page # config.param_name = :page end Contact GitHub API Training Shop Blog About
kaminariをAPIに適用させる
config/initializers/active_model_serializer.rb
ActiveModel::Serializer.config.adapter = :json_api
controllerを実装する
class TodosController < ApplicationController def index #deviceを利用していますが、ここは各自読み替え todos = current_user.todos.page(params[:page] ||= 1) #meta 以下が今回の設定を適用させる render json: todos, meta: pagination_dict(todos) end #以下省略
出力確認
{ "data":[{"id":"11","type":"todos","attributes":{"body":"APIを実装する","memo":"","complete":false,"user-id":9}}, {"id":"12","type":"todos","attributes":{"body":"はてなに投稿する","memo":"","complete":false,"user-id":9}},{"id":"13","type":"todos","attributes":{"body":"記事を投稿する","memo":"","complete":false,"user-id":9}}], "links":{}, "meta":{"current-page":1,"next-page":null,"prev-page":null,"total-pages":1,"total-count":3} }
meta 及び links がnodeに存在すれば完了。