包含与Active Model Serializer的关联

时间:2016-03-22 12:29:46

标签: ruby-on-rails

在Rails 5应用程序中,我使用了Active Model Serializer 0.10.0.rc4。我想在json哈希中包含一个关系。

我有这个序列化器:

class GroupSerializer < ActiveModel::Serializer
  attributes :id, :name, :subscription_ids, :nb_places, :description,
    :schedule, :course_id
end

我正在使用它:

resource = Group.all
ActiveModel::Serializer.serializer_for(resource).new(resource, include: :subscriptions).as_json

我有这个:

{"group"=>{:id=>1, :name=>"12", :subscription_ids=>[1, 2, 3], :nb_places=>12, :description=>nil, :schedule=>"12", :course_id=>1}}

我不明白为什么订阅不包括在内。我不想在序列化程序中使用has_many,因为当有多个规则时它会导致无限循环。

我想要这样的事情:

{"group"=>{:id=>1, :name=>"12", :subscription_ids=>[1], :nb_places=>12, :description=>nil, :schedule=>"12", :course_id=>1, :subscriptions=>[{:id=>1,:name=>'something'}]}

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以创建这样的订阅方法:

attributes :subscriptions

def subscriptions
  object.subscriptions.as_json(only: [:id, :name])
end