Rails活动记录急切加载不会加载关联

时间:2013-10-12 21:40:34

标签: ruby-on-rails ruby-on-rails-4 eager-loading

我正在写一个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 tasks WHERE tasksparent_id = 0

     

任务加载(0.3ms)SELECT tasks。* FROM tasks WHERE tasksparent_id IN(1,2)

所以它确实运行查询,但是,它不会将结果放在我的对象中。响应中显示的唯一2个任务是parent_id = 0。

我做错了吗?我也希望这个子任务也在响应中。

1 个答案:

答案 0 :(得分:3)

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

render json: Task.where(parent_id: 0).includes(:children).to_json(include: :children)