見出し画像

【Rails】Albaでシリアライザーでネストした値を取得する

概要

以下のように、`event`に紐づいている`users`を取得しようとしていました。

# typed: strict

class Admin
  class EventSerializer < ApplicationSerializer
    root_key(:event)
    root_key_for_collection(:events)

    attributes :id, :name
    formatted_time_attributes :created_at, :updated_at

    many :users
  end
end

問題と原因

eventとuserがお互いを呼び続けるため、ループして、SystemStackError: stack level too deep が発生しました。

解決策

withinオプションを使用することで解決しました。

Before

def show
  event = Event.find(params[:id])
  render(json: EventSerializer.new(event)) #=> ここ
end

After

def show
  event = Event.find(params[:id])
  render(json: EventSerializer.new(event, within: [:users])) #=> ここ
end

このように、withinオプションを使用することで、ネストした値を適切にシリアライズすることができます。これにより、無限ループを防ぎ、データを正常に取得できるようになります。

この記事が気に入ったらサポートをしてみませんか?