🤔

active_model_serializersについて色々と…

2022/01/09に公開

RailsをAPIモードで実装しています。
APIがrender json返すJSON形式のデータの整えて、見えやすくするために使われるGemがactive_model_serializer(アクティブモデルシリアライザー)です。

例えばUserモデルでjsonで返したい場合、

active_model_serializersの導入

Gemfileの最下行に追記

gem 'active_model_serializers'

bundle installを実行

% bundle install

serializerファイル作成

Userモデルのserializerを作成します。

rails g serializer user

成功すると、app/serializers/にserializerのファイルが作成されます。

Running via Spring preloader in process 34392
      create  app/serializers/user_serializer.rb

導入時にエラーが出た場合

ちなみに、serializersを導入しようとするとCould not find generator 'serializer'.といったエラーを吐かれることがあります。

 % rails g serializer user
Running via Spring preloader in process 34278
Could not find generator 'serializer'. 
Run `rails generate --help` for more options.

springというrails標準のアプリケーションプリローダーが動いているからみたいです。
Rails/Spring サポート

以下のコマンドを入力します。

spring stop

springが停止します。

% spring stop
Spring stopped.

停止が成功したら、rails g serializer モデル名を打ってください。

実装

コントローラ-

class V1::UsersController < ApplicationController
def index
  users = User.all
  render json: users
end

シリアライザー

class UserSerializer < ActiveModel::Serializer
  attributes :id, :name, :email
  has_many :todos
end

attributes(カラム)のid,name,emailがrender json: usersでレスポンスとして返ってきます。

{ 
  "user" : {
    "id" : "ユーザーのID",
    "name": "ユーザーの名前",
    "email": "emailアドレス名"
}

Discussion