我在控制器方法中有一个更大的JSON响应:
render json: {
user: { id: @current_user.id,
name: @current_user.full_name,
title: @current_user.title,
phone_work: @current_user.phone_work,
phone_mobile: @current_user.phone_mobile,
addresses: @current_user.addresses },
appointments: @current_user.appointments
}
我尝试AppointmentSerializer.new(@current_user.appointments)
,我收到了这个错误:undefined method 'read_attribute_for_serialization'
。错误来自第一行,其中呈现json(render json:
)。
如何为用户,用户地址和约会指定不同的序列化程序?
答案 0 :(得分:0)
有一个关键点可以回答你的问题,你使用的是什么版本的AMS?
作为AMS的撰稿人,我强烈建议您继续关注GitHub,我们正在积极研究新版本0.10.0(可能会变成1.0),它应该是将于下个月发布。所以请记住,您可以尽快更新并避免一些旧问题。
关于您的问题,在我看来,您可能忘记将serialization
模块包含在您的模型中。只需添加它就可以了。
include ActiveModel::Serialization
您可以在旧版0.9 README
中看到对此的引用答案 1 :(得分:0)
我通过合并两个序列化器来实现这一点,而不是理想的,但是:
response = AppointmentSerializer.new(@current_user.appointments).as_json
response.merge(UserSerializer.new(@current_user).as_json)
render json: response
答案 2 :(得分:0)
如果使用ActiveModel::Serializer
,则可以在其正确的文件夹中创建自定义序列化程序,然后调用render json: current_user, each_serializer:CustomUserSerializer
在序列化器上:
class CustomUserSerializer < ActiveModel::Serializer
attributes :id, :name, :title, :phone_work, :phone_mobile, :addresses
has_many :appointments
end