🐣

Railsのserializerの使い方や導入手順について再認識する

2024/01/31に公開

最初に

私は、大学生であり、もう少しでWebエンジニアとしてのキャリアが始まる為、現在学習している内容などを投稿していきたいと思います。

今回の記事では、RailsのSerializerについての記事を書きたいと思います。

こちらの記事は、初心者向けでございますので、ご了承ください。

serializerについて

serializerとは、RailsでAPIを作る際、データをJSON形式にわかりやすく変換して適切な制御できるgemの事です。

例えば、userのデータ情報がid,name,email,created_at,update_atとあったとして、user情報をAPIから送る際に全ての情報を送るのは、セキュリティの面で問題となるので、userの全ての情報のうち、どの情報をレスポンスするのかを制御する為にserializerを導入します。

1. gemのインストールと設定

  • gemインストール

Railsでserializerを扱う為には、Gemfileにgemを追加してインストールする必要があります。

Gemfile
+ gem 'active_model_serializers'

上記をGemfileに追記した後にgemをインストールします。

bundle install

これで、serializerのgemインストールは完了です。

2. serializerの生成

  • serializerのファイルを生成する

serializerを生成する為に下記のコマンドを実行します。

rails g serializer Modelhoge

コマンド実行後にapp/serializers/modelhoge_serializer.rbファイルが自動的に生成されます。

3. serializerの使い方

  • 基本的な設定

serializernの設定をする為に、app/serializers/modelhoge_serializer.rbファイルにコードを記載していきます。

app/serializers/modelhoge_serializer.rb
class ModelhogeSerializer < ActiveModel::Serializer
+  attributes :id, :name, :email
end

user情報のカラムを例として、serializeします。

serializerファイルでは、どのカラムの情報レスポンスボディーに含めるか定義します。

したがって、上記のコードでは、id,name,emailカラムのみをレスポンスボディーに含めるように定義しました。

アソシエーションしてるデータをserializeする場合

app/serializers/modelhoge_serializer.rb
class ModelhogeSerializer < ActiveModel::Serializer
  attributes :id, :name, :email
+ has_many :content
end

次に、上記で定義したserializerをコントローラーに呼び出しをして行きます。

serializeの呼び出し

  • コントローラーで呼び出し

先ほど定義したserializerをコントローラーで呼び出す為に以下のようにコードを書いて行きます。

app/controllers/hoge_controller.rb
class HogeController < ApplicationController
  def show
    @model = Model.find(params[:id])
    render json: @model, serializer: ModelhogeSerializer
  end
end

上記によってModelHogeSerializerで定義したデータがJSON形式でレスポンスされるようになります。

参考

https://qiita.com/Hashimoto-Noriaki/items/91c2bb94bce87495193e

Discussion