0

我正在编写一个 REST api 来返回任务列表。

这是我的一组数据:

id | name         | parent_id
1  | Ride a horse | 0
2  | Eat tacos    | 0
3  | Get some cash| 2

一个任务可以有子任务,所以我让我的模型自我加入:

class Task < ActiveRecord::Base
    belongs_to :parent, :class_name => 'Task', :foreign_key => 'parent_id'
    has_many :children, :class_name => 'Task', :foreign_key => 'parent_id'
end

然后我急切地加载我的任务

def index
    respond_with Task.where(parent_id: 0).includes(:children)
end

这是控制台显示的内容:

任务负载 (0.4ms) SELECT tasks.* FROM tasksWHERE tasksparent_id= 0

任务负载 (0.3ms) SELECT tasks.* FROM tasksWHERE tasksparent_id输入 (1, 2)

所以它实际上确实运行了查询,但是,它没有将结果放入我的对象中。响应中显示的唯一 2 个任务是 parent_id = 0 的任务。

难道我做错了什么?我希望这个子任务也出现在响应中。

4

1 回答 1

3

我认为问题在于默认情况下 to_json 不包含相关对象。试试这个:

render json: Task.where(parent_id: 0).includes(:children).to_json(include: :children)
于 2013-10-12T21:59:15.870 回答