LoginSignup
30
19

More than 5 years have passed since last update.

Rails5 APIモードでJbuilderを使いたい時の追加設定〜APIサーバ構築〜

Posted at

背景

現在ネイティブアプリを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

30
19
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
30
19