JQ Blog

ActiveModelSerializersについて

Mastodonのソースコードを最近のRailsの記述を学ぼうとしたのでMastodonのソースコードを読み始めた。
Mastodonのrootページになる/aboutからみたのだが、最初からわからないことばかり!(泣)
MastodonにはActiveModelSerializersを使ってjsonの処理を行っていたのでActiveModelSerializersを調べてみた。

ActiveModelSerializersとは

ActiveModelSerializersによると

ActiveModelSerializers brings convention over configuration to your JSON generation.

と書いてある。 つまりActiveModelSerializersとはRailsで簡単で素早くjsonを作れるgemである。 JSON形式でレスポンスを返す場合、表示するパラメータを制御したいときに細かなJSONの制御を行うことができるので便利。

使い方

rails generate serializer Hogeを実行すると
app/serializers/hoge_serializer.rbファイルが作成される。

1
2
3
4
5
6
7
class HogeSerializer < ActiveModel::Serializer
  attributes :id, :name, :email, :name_size

  def name_size
    object.name.size
  end
end

上記のコードをみてみると
- attributesにレスポンスで表示したいパラメータを記述する。 - 関連オブジェクトで同時に表示したいオブジェクトがある場合はhas_manyhas_oneなどが使える。 - 関数を定義することで、独自のパラメータを追加することもできる。

Controllerで次のように書くと、

1
2
@hoge = Hoge.first
render json: @hoge

結果のjsonが以下のようになっている。

1
2
3
4
5
6
{
  id: 1,
  name: 'hoge',
  email: 'hoge@example.com',
  name_size: 4
}

このように、Serializerクラスで整形処理を行うことで、Controllerがより綺麗になると思う。

参照

active_model_serializersが便利