如何从Rails ActiveModelSerializers返回父数据?
这是我的模特
class User < ActiveRecord::Base
has_many :user_groups ,dependent: :destroy
has_many :groups , through: :user_groups
end
class Group < ActiveRecord::Base
has_many :user_groups ,dependent: :destroy
has_many :users , through: :user_groups
end
class UserGroup < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
这是我的序列化程序
class UserSerializer < ActiveModel::Serializer
attributes :id ,:email, :username, :fullname, :grade,:auth_token
has_many :user_groups
end
class GroupSerializer < ActiveModel::Serializer
attributes :id ,:name ,:court_price ,:shuttle_price
has_many :user_groups
end
class UserGroupSerializer < ActiveModel::Serializer
attributes :id , :level
belongs_to :user_id
end
这是我的控制器
def member_list
group = current_user.groups.find_by(id: params[:id])
respond_with group
end
所以我想用User数据返回UserGroup数据,但这就是我得到的。
{
"id": 35,
"name": "test 01",
"court_price": 150,
"shuttle_price": 12,
"user_groups": [
{
"id": 30,
"level": "player"
},
{
"id": 29,
"level": "owner"
}
]
}
如何在user_groups数组中返回用户数据? 谢谢!
答案 0 :(得分:1)
你必须小心那里的循环引用。 Group
嵌入UserGroup
嵌入User
,嵌入UserGroup
。
对于这种情况,我建议为没有关系的用户创建自定义序列化程序。例如ShallowUserSerializer。
class ShallowUserSerializer < ActiveModel::Serializer
attributes :id ,:email, :username, :fullname, :grade,:auth_token
end
除此之外,UserGroupSerializer存在一些问题。 active_model_serializer的文档状态:
序列化程序只关注多重性,而不是所有权。 belongs_to可以使用has_one in包含ActiveRecord关联 你的序列化器。
所以你可以像这样重写它:
class UserGroupSerializer < ActiveModel::Serializer
attributes :id , :level
has_one :user, serializer: ShallowUserSerializer
end