主动模型序列化器 each_serializer 与序列化器

rai*_*ine 7 ruby ruby-on-rails

我注意到当我想获取对象集合 (@user.all) 时,我必须使用 each_serializer

render json: @users, root: 'data', each_serializer: User::ShowSerializer
Run Code Online (Sandbox Code Playgroud)

而当我必须有一个对象时,显示动作序列化程序可以工作。

render json: @user, root: 'data', serializer: User::ShowSerializer
Run Code Online (Sandbox Code Playgroud)

请任何人都可以解释两者之间的区别

Pra*_*nde 11

可以将其视为eachRuby 中的迭代器。

当您只有一个 record 时@user,不需要迭代,作为回报,您将获得一个序列化的资源。这里我们直接应用一个serializer

render json: @user, root: 'data', serializer: User::ShowSerializer
Run Code Online (Sandbox Code Playgroud)

认为这与

User::ShowSerializer(@user)
Run Code Online (Sandbox Code Playgroud)

当您有一个记录集合时,例如@user.all,您必须遍历每个资源以获取序列化的记录集合。我们在这里申请each_serializer

render json: @users, root: 'data', each_serializer: User::ShowSerializer
Run Code Online (Sandbox Code Playgroud)

这与

@users.each do |user|
  User::ShowSerializer(user)
end
Run Code Online (Sandbox Code Playgroud)


Vis*_*hal 6

对于一个集合

:serializer指定集合序列化器和

:each_serializer为集合中的每个资源指定序列化器。对于单个资源, :serializer 选项是资源序列化

请查看此文档以获取更多详细信息