在Rails中的较大的分组JSON响应中指定多个(活动模型)序列化程序?

时间:2015-03-16 15:30:15

标签: ruby-on-rails json active-model-serializers

我在控制器方法中有一个更大的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:)。

如何为用户,用户地址和约会指定不同的序列化程序?

3 个答案:

答案 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