ActiveModelSerializersの備忘録
会社でActiveModelSerializersを利用する機会があったのですが、よく理解していなかったので自分用の備忘録を残す。
ActiveModelSerializersとは
最近ではRailsをAPIモードで開発する機会も多い。 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.