rails5のapiモードを試した
ローカルPCで動作させてみる
まずは rbenv を使って ruby環境でrailsをインストールするところまでやる。
http://kimagureneet.hatenablog.com/entry/2017/09/27/143151
基本的にはここに書いた通りだが
・今回はrails5を使いたいのでバージョンの固定はしない
・apiモードを使いたいのでプロジェクト作成のコマンドに --api をつける
$ bundle exec rails new myapp --api
apiモードを使ってjsonを返す
とりあえずユーザの一覧を返すAPIを作ってみる。
routes に追加
Rails.application.routes.draw do get '/users', to: 'users#index' end
routes の確認
$ ./bin/rails routes Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index
users コントローラの作成
$ ./bin/rails g controller users
controllers/users_controller.rb が作成されるのでjsonをかえすコードを追加
class UsersController < ApplicationController def index render json:{ users:[{id:1, name:'test1'},{id:2, name:'test2'}] } end end
ここまで作ったら http://localhost:3000/users にアクセスすると json が返されることを確認できた。
{"users":[{"id":1,"name":"test1"},{"id":2,"name":"test2"}]}
dbからデータを取得する
まずはdbを作成
$ ./bin/rails db:create
つづいて model の作成
$ ./bin/rails g model user
model を作成するとmigrationファイルも作成されるのでここにカラムを追加する。
db/migrate/20171009182615_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.1] def change create_table :users do |t| t.string :email t.string :name t.timestamps end end end
migrate を実行
$ ./bin/rails db:migrate
ここまでにテーブルが作成されるのでコマンドラインからデータを登録して確認してみる
$ ./bin/rails console # 登録 > user = User.new > user.name = "test1" > user.email = "test1@test.com" > user.save # 確認 > User.all
データが登録されたことを確認できたので、APIとしてもusersデータをかえすように修正
contorollers/users_controller.rb
class UsersController < ApplicationController def index render json:{ users:User.all } end end
ページングに対応する
kaminari という gem が有名ぽいので使ってみる。
なにはともあれ kaminari をインストール
Gemfile
・・・ gem 'kaminari' ・・・
以下でインストールと設定を行う
# インストール $ bundle install $ vi config/initializers/kaminari_config.rb Kaminari.configure do |config| config.default_per_page = 2 ## デフォルト表示数を定義 ・・・
controllers/users_controller.rb
class UsersController < ApplicationController def index users = User.all.page(params[:page]) total = User.all.page.total_pages render json:{ total:total, users:users } end end
{"total":3, "users":[{"id":1,"name":"test1"},{"id":2,"name":"test2"}]}
http://localhost:3000/users?page=2
{"total":3, "users":[{"id":3,"name":"test3"}]}
とりあえずやりたいことはできた。以上です。