Rails嵌套关联。在渲染中:json

时间:2014-11-04 20:25:29

标签: ruby-on-rails ruby json ruby-on-rails-4

现有的问题让我90%的方式达到了我的目标,但是有一个障碍。

我有一个CheckIns模型和一个Person模型。 CheckIns属于People

在我的控制器中,我有这段代码:

data = CheckIn.all
render json: { data: data }

对于每个CheckIn,我想将关联的Person嵌套在其中。过去的StackOverflow问题建议我这样做:

data = CheckIn.all
render json: data.to_json include: :person

但是,这使我很难将数据嵌套在包装器JSON对象中,就像我最初那样,因为to_json创建了一个字符串,而不是Hash

我想要包装器JSON对象,以便我可以遵循标准化的JSON输出,其中data始终位于data:字段中,其他元数据可以附加到响应中。

如何在保留包装器对象的同时获得include:的{​​{1}}标志的效果?特别是,这对我来说不是一个有效的答案,因为它真的很难看:

to_json

谢谢!希望在Rails中有一种惯用的方法。

1 个答案:

答案 0 :(得分:3)

Active Records支持预先加载http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

加载与用户关联的签到:

@users = User.all.includes(:checkins)

将查询:

User Load (0.2ms)  SELECT "users".* FROM "users"
Checkin Load (0.1ms)  SELECT "checkins".* FROM "checkins"  WHERE "checkins"."user_id" IN (1)

但是这不会让你渲染你的嵌套对象,你正在寻找的东西是装饰你的数据

查看https://github.com/nesquena/rabl或github.com/rails/jbuilder

您将能够为装饰者提供模板和数据对象来呈现