#serializerとは
データを保存したり、ネットワークで送受信できるようにしたりするものです。
#active_model_serializerとは
RailsでAPIを叩いて開発する時、わかりやすいJSON形式にしてくれるものです。
⚫︎公式ドキュメントに概要や使い方が乗っています。
https://github.com/rails-api/active_model_serializers
⚫︎公式ドキュメント翻訳
https://qiita.com/ikamirin/items/be809c845f6104aa6f48#adapters
#active_model_serializerの導入
gem 'active_model_serializers', '~> 0.10.0'
を追記
$ bundle install
公式ドキュメントではbundle なのでbundleも可。
$ bundle exec rails g serializer Staff(モデル名)
上のコマンドを実行し、serializersディレクトリが作成されuser_serializer.rbが生成される。
class PostSerializer < ApplicationSerializer
attributes :id
end
この中を開発したいものによってbelongs_toやhas_manyを入れていく。
例えば
class StaffSerializer < ApplicationSerializer
attributes :id :name :account :email
belongs_to :office
end
みたいな感じです。
#名前空間を使った時
コントオーラーを作成した時ルーティングでapi/v1のような名前空間を定義した時
は下のようになります。
$ bundle exec rails g controller api/v1/staffs index create show update destroy
class Api::V1::StaffSerializer < ActiveModel::Serializer
attributes :id, :name,:account, :email,
end
みたいにclassの後にApi::V1が追加されます。
module Api::V1
class Api::V1::UsersController < ApplicationController
#省略
def index
staffs = Staff.all
render json: staffs
end
#省略
end
みたいに使えます。
あくまで参考にお願いします。
⚫︎参考資料
https://qiita.com/onikan/items/d24ce08adf144c326812
https://qiita.com/ikamirin/items/be809c845f6104aa6f48
https://rooter.jp/programming/rails-activemodelserializers/
https://qiita.com/TeruhisaFukumoto/items/33dd278115efe6f1fa31
https://qiita.com/TeruhisaFukumoto/items/33dd278115efe6f1fa31