我正在写一个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
。* FROMtasks
WHEREtasks
。parent_id
= 0任务加载(0.3ms)SELECT
tasks
。* FROMtasks
WHEREtasks
。parent_id
IN(1,2)
所以它确实运行查询,但是,它不会将结果放在我的对象中。响应中显示的唯一2个任务是parent_id = 0。
我做错了吗?我也希望这个子任务也在响应中。
答案 0 :(得分:3)
我认为问题是默认情况下to_json不包含相关对象。 试试这个:
render json: Task.where(parent_id: 0).includes(:children).to_json(include: :children)