带有另一个序列化程序的 ActiveModel Serializer 中的自定义字段

Custom field in ActiveModel Serializer with another serializer

我有 User 个模型 has_many :sessions。但是对于一个特定的请求,我只想发送一个基于请求设备平台的会话(iOS、Android)。

问题是我有单独的 UserSerializerUserSessionSerializer,我想将 UserSessionSerializer 作为 UserSerializer 中的选项传递给 :session 字段。像这样:

# UsersController
render json: @user, serializer: UserSerializer, session: @session # @user's session founded by platform

# UserSerializer
attributes :id, :email, :username, :session

def session
  @instance_options[:session], serializer: UserSessionSerializer
end

这是不可能的,因为据我所知,我只能在 has_onehas_many 中传递序列化程序。但我不想用 has_many 渲染 JSON 中的所有用户会话,只创建一个。

感谢您的帮助!

您的代码很好,只需使用 UserSessionSerializer.new 而不是 serializer: UserSessionSerializer

render json: { user: UserSerializer.new(@user, session: @session) }

attributes :id, :email, :username, :session

def session
  UserSessionSerializer.new(self.instance_options[:session]) if self.instance_options[:session].present?
end