我有组织序列化程序如下:
class OrganizationSerializer < ActiveModel::Serializer
attributes :user_first_name,
:user_last_name,
:user_email
has_many :user
def user_first_name
object.user.first_name
end
def user_last_name
object.user.last_name
end
def user_email
object.user.email
end
end
我的问题是,有没有更好的方法不为每个属性定义重复def user _...?
答案 0 :(得分:0)
在我看来,最好的做法是像下面的代码段那样做:
has_many :users, each_serializer: YourUserSerializer
另一种选择是:
attributes :users
def users
ActiveModel::ArraySerializer.new(object.users, each_serializer: YourUserSerializer)
end
这允许您在JSON响应中返回一组对象,并且还可以选择序列化它们。
如果您不希望序列化用户(似乎您想要,并且确实适合),请将false
传递给each_serializer
选项。
上述任何一种解决方案都会产生类似的结果(我填补空白):
{
"organization": {
"users": [{
"first_name": "John",
"last_name": "Doe",
"email": "johndoe@gmail.com"
}]
}
}