我的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中呈现所有用户会话,只创建一个。
感谢您的帮助!
答案 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