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

时间:2018-04-12 09:36:28

标签: ruby-on-rails active-model-serializers

我的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中呈现所有用户会话,只创建一个。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的代码很好,只需使用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