jbuilderの導入方法と使い方
code:Gemfile
gem 'jbuilder'
1番上の階層が作られる。
code:json
json.total_pages @events.total_pages
↓
{
"total_pages": 10
}
階層を下げるには、doを使ってブロックを作り、その中に値を書いていく。
code:json
json.events do
json.id 123
end
↓
"events": {
"id": 123
}
オブジェクトの配列を作るには、doを使ったブロック中で、array!でループさせる。
code:json
json.events do
json.array!(@events) do |event|
json.id event.id
end
end
↓
"events": [
{
"id": 1185,
},
{
"id": 1183,
}
]
対象オブジェクトが1件だけなら、extract!を使って簡単に出力できる。
code:json
json.extract! @item, :id, :title, :description, :created_at, :updated_at
↓
{
"id": 1,
"title": "テスト",
"description": "てすと",
"created_at": "2021-01-01T09:22:25.186Z",
"updated_at": "2021-01-01T09:22:25.186Z",
}
if文やインスタンスメソッドを使うこともできる。
code:json
if @event.image.present?
json.image_url @event.resized_image_url
json.width @event.image.width
json.height @event.image.height
end
code:json
json.finished @event.finished?
class Event < ApplicationRecord
def finished?
return true if event_dates.blank?
event_dates.last.datte < Date.current
end
end
ルーティングのprefixを使える。
code:json
json.url event_url(public_id: @event.eventer.public_id, event_id: @event.id, utm_source: :test)
参考リンク:
rails/jbuilder: Jbuilder: generate JSON objects with a Builder-style DSL
【Rails】JSONデータを返却する「gem jbuilder」の便利な使い方 - おぴよの気まぐれ日記