概要
Ruby on Rail6においてREST-API等でActiveRecordのデータをjsonに出力する時のメモ。
スポンサーリンク
方法
to_jsonメソッドが定義されているのでそちらを使用する。
基本形
Articleモデルの全件をjsonとして出力する例
1 2 3 4 5 6 7 |
Article.all.to_json -> { { "id":1, "title":"xx", .... }, .... } |
特定のカラムのみ出力したい場合
onlyでカラム名を指定する事で、特定のカラムだけを出力可能。
1 2 3 4 5 6 7 |
Article.all.to_json(only: [:title, :sub_title]) -> { { "title":"xx", "sub_title":"xxxx" }, .... } |
onlyの反対でexceptで除外することも可能。
1 2 3 4 5 6 7 |
Article.all.to_json(except: [:sub_title]) -> { { "id":"xx", "sub_title":"xxxx", .... }, .... } |
メソッド
methodsを使用する事で、
カラムの値を加工した値を出力したい場合など、メソッドの戻り値も出力可能。
1 2 3 4 5 6 7 |
Article.all.to_json(methods: :title_image_compressed_url) -> { { "id":1, "title":"xx", ... , "title_image_compressed_url": "xxxxx" }, .... } |
特関連モデル
関連モデルもincludeで出力可能。
1:nのモデルとしてareasが定義されている場合
1 2 3 4 5 6 7 |
Article.all.to_json(include: [:areas]) -> { { "id":1, "title":"xx", ... , "areas": [{ id:1, name:"area1" },{...}] }, .... } |
関連モデル内の特定のカラムの指定も可能。
1 2 3 4 5 6 |
Article.all.to_json(include: [{ areas: { only: [:id] } }]) -> { { "id":1, "title":"xx", ... , "areas": [{ id:1 },{...}] }, .... } |