【发布时间】:2014-11-04 20:25:28
【问题描述】:
现有问题已经让我完成了 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: 字段中,并且可以将其他元数据附加到响应中。
如何获得to_json 的include: 标志的效果,同时保留包装器对象?特别是,这对我来说不是一个有效的答案,因为它真的很难看:
data = CheckIn.all
render json: { data: JSON.parse data.to_json(include: :person) }
谢谢!希望在 Rails 中有一种惯用的方式来做到这一点。
【问题讨论】:
-
我强烈建议使用 Jbuilder 或 RABL 来格式化您的 JSON,而不是 .to_json。这两个 gem 都提供了更明确的 DSL 来格式化你的 JSON。
-
jbuilder 是你的朋友...
-
是的,我已经知道 JBuilder,但我特别想知道我是否可以做到这一点:a) 没有
to_json,b) 没有在我的项目中引入视图。如果它不可行,那很好,但很高兴我的响应生成如此明确。
标签: ruby-on-rails ruby json ruby-on-rails-4