序列化模型子级的JSON关联

时间:2015-04-23 17:32:21

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

我正在为我的API使用active-model-serializers。 我有一个模型(任务)有许多子任务(总是任务模型),称为子项。 由于祖先gem(https://github.com/stefankroes/ancestry

,我做了这个递归的has_many关联

它运作得很好,但我有这个问题: 任务与用户关联,但在活动模型序列化程序中,导出主对象的用户时,它也不会显示所有子项的用户详细信息。 这是我的序列化器:

class TaskSerializer < ActiveModel::Serializer
  attributes :id, :name, :details, :user_id

  belongs_to :user
  has_many :children

end

这是我的控制者:

class Api::V1::TasksController < Api::V1::BaseController
  respond_to :json

  def index
    @tasks = current_user.company.tasks
    respond_with @tasks, location: nil
  end
end

这是我的模特:

class Task < ActiveRecord::Base
  has_ancestry

  belongs_to :user
end

我也试图在我的模型中这样做:

class Api::V1::TasksController < Api::V1::BaseController
  respond_to :json

  def index
    @tasks = current_user.company.tasks
    render json: @tasks,
           each_serializer: TaskSerializer,
           status: :ok

  end
end

但是不起作用......我已经为父对象提供了用户详细信息,但没有给孩子们(他只显示user_id,没有所有User对象)

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您是否尝试为Children模型添加序列化程序或将其作为显式属性查询?

var ajax1Complete=false;

$.when(
$.ajax({
        url: 'newphp.php',
        type: "POST",
        beforeSend: function() {
                    $('#loadinimg').foundation('reveal', 'open');
        },
        error: function(data){
        },
        success: function(response){
                 alert(response);    
                 console.log(response);
                 ajax1Complete=true;//set it on success
        },
        complete: function() {
                 //close the loading image
        }
 })).done(function(){
       if(ajax1Complete)
       {
          //make another ajax call here and onsuccess set ajax1Complete to false
       }
 });