32
24

More than 3 years have passed since last update.

ActiveModel as_json のオプション一覧

Last updated at Posted at 2019-10-01

.as_json(options = nil)

option名 詳細
root trueを指定すると、root要素としてモデル名のkeyが挿入される(ネストがひとつ深くなる)
only 要素名の配列を渡すと、その要素のみが出力される
except 要素名の配列を渡すと、その要素以外が出力される
methods モデルのメソッド名(配列可)を渡すと、そのメソッドの実行結果が出力される
include アソシエーション名(配列可、ネスト可)を渡すと、その関連情報も一緒に出力される
root
user.as_json(root: true)
# => { "user" => { 
#        "id" => 1, "name" => "Konata Izumi", "age" => 16, "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true 
#    } }
only
user.as_json(only: [:id, :name])
# => { "id" => 1, "name" => "Konata Izumi" }
except
user.as_json(except: [:id, :created_at, :age])
# => { "name" => "Konata Izumi", "awesome" => true }
methods
user.as_json(methods: :permalink)
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
#      "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true,
#      "permalink" => "1-konata-izumi" }
include
user.as_json(include: :posts)
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
#      "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true,
#      "posts" => [ { "id" => 1, "author_id" => 1, "title" => "Welcome to the weblog" },
#                   { "id" => 2, "author_id" => 1, "title" => "So I was thinking" } ] }
include(example)
user.as_json(include: { posts: {
                           include: { comments: {
                                          only: :body } },
                           only: :title } })
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
#      "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true,
#      "posts" => [ { "comments" => [ { "body" => "1st post!" }, { "body" => "Second!" } ],
#                     "title" => "Welcome to the weblog" },
#                   { "comments" => [ { "body" => "Don't think too hard" } ],
#                     "title" => "So I was thinking" } ] }

参考

32
24
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
32
24