🤔
active_model_serializersについて色々と…
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