技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

ActiveModelSerializersの備忘録

ActiveModelSerializersの備忘録

会社でActiveModelSerializersを利用する機会があったのですが、よく理解していなかったので自分用の備忘録を残す。

ActiveModelSerializersとは

最近ではRailsAPIモードで開発する機会も多い。 ActiveModelSerializers: JSONオブジェクトを作成するオブジェクトの作成を支援するライブラリです。

呼び出し方

  def hoge
    @post = Post.find(params[:id])
    render json: @post, serializer: PostSerializer
  end

Controllerクラスのメソッドに書き加える。 renderのオプションにserializer: PostSerializerってかけばPostSerializerクラスを呼び出してくれる。

class PostSerializer < ActiveModel::Serializer

  # 別名をつけたい時はkeyを使用する
  attribute :created_at, key: :timestamp

end

別名をつけたいときはkeyを利用する

class PostSerializer < ActiveModel::Serializer

  # 別名をつけたい時はkeyを使用する
  attribute :created_at, key: :timestamp

end
{  
  timestamp: "2018-01-01T00:00:00+09:00"
}

参考: ActiveModelSerializersを使った所感 - メドピア開発者ブログ

serializer each_serializer vs serializer

each_serializerを利用するときは@user.allなどで複数取得した場合

render json: @users, root: 'data', each_serializer: User::ShowSerializer

これは以下のような処理をしている。

@users.each do |user|
  User::ShowSerializer(user)
end

serializerを利用するときは@userがシングルレコードの時。

render json: @user, root: 'data', serializer: User::ShowSerializer

これは以下のような処理をしている。

User::ShowSerializer(@user)

ruby on rails - Active model serializer each_serializer vs serializer - Stack Overflow

メソッドと組み合わせ

class PostSerializer < ActiveModel::Serializer

  attribute :created_at, key: :timestamp
  attribute: titile

 def titile
   " this book titile is #{object.titile}"
 end

end

※ obejectとはserializer.newで渡されたオブジェクトのことを指す。

gemの概要

GitHub - rails-api/active_model_serializers at 0-10-stable

ActiveModelSerializers works through two components: serializers and adapters.

と記載がある通り、serializersとadaptersに大きく分類される。 serializersとは何をシリアライズするかを表す(どのattributeやrelationをserializeするか)

Serializers describe which attributes and relationships should be serialized.

adaptersとはどの様にシリアライズするかを表す(どのようにしてattributeやrelationをserializeするか)

Adapters describe how attributes and relationships should be serialized.

参考サイト

ActiveModelSerializersを使った所感 - メドピア開発者ブログ

GitHub - rails-api/active_model_serializers at 0-10-stable