带有另一个序列化程序的 ActiveModel Serializer 中的自定义字段
Custom field in ActiveModel Serializer with another serializer
我有 User
个模型 has_many :sessions
。但是对于一个特定的请求,我只想发送一个基于请求设备平台的会话(iOS、Android)。
问题是我有单独的 UserSerializer
和 UserSessionSerializer
,我想将 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_one
和 has_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
我有 User
个模型 has_many :sessions
。但是对于一个特定的请求,我只想发送一个基于请求设备平台的会话(iOS、Android)。
问题是我有单独的 UserSerializer
和 UserSessionSerializer
,我想将 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_one
和 has_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