我有2个资源 - post
和author
。 post
有一个author
。当我获取帖子详细信息时,我想有选择地包括作者的详细信息。
示例 -
GET /authors/1
{
'id': 1,
'name': 'Some name',
'email': 'admin@example.com',
'address': 'Some address',
'mobile': '',
'language': 'ruby'
}
GET /posts/1
我想 -
{
'id': 1,
'created_at': '2017-01-01 10:00:00',
'views': 7500,
'seo_score': 4,
'author': {
'id': 1,
'name': 'Some name',
'email': 'admin@example.com'
}
}
代替,
{
'id': 1,
'created_at': '2017-01-01 10:00:00',
'views': 7500,
'seo_score': 4,
'author': {
'id': 1,
'name': 'Some name',
'email': 'admin@example.com',
'address': 'Some address',
'mobile': '',
'language': 'ruby'
}
}
我想知道是否可以使用include
,exclude
,only
等选择序列化程序中的关联属性。
我知道我可以编写一个单独的序列化程序并在定义它时将其映射到关联,但只是包含2个特定属性我不认为添加单独的类是有意义的。
我也知道我可以覆盖关联并获取所有属性并有选择地选择一些;但是我想知道Serializers默认是否支持这个。
答案 0 :(得分:0)
您可以使用所选列创建新关联,例如
belongs_to :author_with_partial_details, -> { select [:id, :name, :email] }, :class_name => "Author"
并使用类似这样的东西
Post.find(params[:id]).includes(:author_with_partial_details)
或者您也可以使用jbuilder gem创建自己的JSON结构,这里是指向gem https://github.com/rails/jbuilder的链接