26
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jbuilderの使い方

Last updated at Posted at 2019-02-11

何かと使う、JSON。
そしてRailsには、このJSON作成を簡単にしてくれる、Jbuilderというものが備わっています。
今回はこのJbuilderを使って、どのようにJSONを形成していくのかをまとめます。

##基本編(固定の値を返す)

//{ key1: value1 }の形
json.set! :key1, 'value1'


json.key1 'value1'
//{ key2: { key3: value3 } }の形
json.set! :key2 do
  json.set! :key3, 'value3'
end


json.key2 do
  json.key3 'value3'
end
//{ key4: { key5: { key6: value6 } } }の形
json.set! :key4 do
  json.set! :key5 do
    json.set! :key6, 'value6'
  end
end

json.key4 do
  json.key5 do
    json.key6 'value6'
  end
end

こんな感じで、入れ子にしたい場合はdo~endの組を増やしていけばOK。

##中級編(モデルから値を取得し、JSONにして返す)

//{ column1: value1, column2: value2 }の形
json.(@item, :column1, :column2)
//{ key3: [{'column3': 'value3', 'column4': 'value4'},{'column3': 'value5', 'column4': 'value6' }] }の形
json.key3 @items do |item|
  json.column3 item.column3
  json.column4 item.column4
end
//key5: { column5: value5, column5: value6 } の形
json.set! :key5 do
  json.(@item, :column5, :column6)
end
//インスタンスのプロパティをkey、valueに使用する形  key6":{ property1: property2 }
json.key6 do |json|
  json.set! @item.property1, @item.property2
end

こんな感じ。
JSONに含む値を増やしたい場合は、基本的にcolumn◯の欄に色々追加していけばOK

##上級編

//配列の形 [{ column1: value1, column2: value2 }, { column1: value3, column2: value4  }]

json.array! @items do |item|
  json.column1 item.column1
  json.column2 item.column2
end
//単一インスタンスを全てJSONに {c1:v1, c2:v2, c3:v3 .........}
json.merge! @item.attributes

これで大体のことは出来るはず!
他に何か便利な使い方あったら教えて下さい。

26
17
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
26
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?