![見出し画像](https://assets.st-note.com/production/uploads/images/144826484/rectangle_large_type_2_eee13fa90f2b3f4ea7b82bca0d77dbf4.jpeg?width=1200)
【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オプションを使用することで、ネストした値を適切にシリアライズすることができます。これにより、無限ループを防ぎ、データを正常に取得できるようになります。
この記事が気に入ったらサポートをしてみませんか?