背景
現在ネイティブアプリをreact-nativeで製作していて、APIサーバーを建てている。既存DBに乗っかる形で開発しているため、色々とややこしい。
複数モデルの情報を組み合わせて、jsonを返したかったのでJbuilderを採用することにした。APIモードでJbuilderを使う際の情報があまりないので、メモ書き程度に残しておく。
バージョン
Rails 5.0.1
ruby 2.3.1
jbuilder 2.6.1
手順1: Jbuilderのインストール
デフォルトではコメントアウトされているので、外してinstallしてあげる。以下の部分
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
そしてbundle install。
手順2:Controllerに追加記述する内容
単純にDBに登録されている情報を全て返すようなcontrollerを記述するならば、Jbuilderを使わなければ、以下のようになるはず。
app/controllers/XXX_controller.rb
class PostersController < ApplicationController
before_action :set_poster, only: [:show, :update, :destroy]
# GET /posters
def index
@xxxs = XXX.all
render json: @xxxs
end
end
これでは勝手にJbuilderを読んでくれないので、renderの部分を書き直す必要がある。
app/controllers/XXX_controllers.rb
class PostersController < ApplicationController
before_action :set_poster, only: [:show, :update, :destroy]
def index
@xxxs = XXX.all
# 追記した部分
render 'index', formats: 'json', handlers: 'jbuilder'
end
end
一定条件のもと省略できるのもあるから適当に試してみるのをおすすめします。
これで、jbuilder用のViewを作って、そこに内容を記入していけばよい。もちろんroutesの設定も忘れずに。
app/views/XXX/index.json.jbuilder
json.extract! @xxxs
この本に若干jbuilderに関する記述があるのでおすすめ。
パーフェクトRuby on Rails