我在Rails项目中使用ActiveModel Serializers。
对象的默认序列化程序相当大,并且在API响应中嵌套对象会导致相当大的JSON对象。
有时候,我想嵌入一个对象,但只需要在JSON中出现一小部分对象的属性。
显然,我可以这样做:
render json: @user, serializer: SmallerUserSerializer
但这会导致大量重复。
是否有可以传递给序列化程序的选项,以便它只包含序列化程序属性的子集?例如:
class BlogSerializer
# This is pseudocode. Does not actually work.
has_one :user, only_show: [:user_id, :profile_url]
end
答案 0 :(得分:0)
创建方法并在用户对象上调用to_json
。然后将该方法名称添加到属性列表中。该方法也可以称为用户。
class BlogSerializer
attributes :id, :user
def user
object.user.to_json( only: [ :id, :profile_url ] )
end
end
答案 1 :(得分:0)
使用active model serialzers gem。
您的伪代码将成为以下简单的模块化代码:
class BlogSerializer < ActiveModel::Serializer
attributes :user_id, :profile_url
end
指南:http://railscasts.com/episodes/409-active-model-serializers
答案 2 :(得分:0)
创建一个方法并在用户对象上调用to_json。然后将该方法名称添加到属性列表中。该方法也可以称为用户。
class BlogSerializer
require 'json'
attributes :id, :user
def user
JSON.parse "#{object.user.to_json( only: [ :id, :profile_url ] )}"
end
end