gpt4 book ai didi

ruby-on-rails - Rails 嵌套关联。在渲染 :json

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:36 25 4
gpt4 key购买 nike

现有的问题已经让我完成了我想要的 90%,但是有一个障碍。

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

在我的 Controller 中,我有这段代码:

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_jsoninclude: 标志的效果,同时保留包装对象?特别是,这对我来说不是一个有效的答案,因为它真的很难看:

data = CheckIn.all
render json: { data: JSON.parse data.to_json(include: :person) }

谢谢!希望在 Rails 中有一种惯用的方法来做到这一点。

最佳答案

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

您将能够为装饰器提供模板和数据对象以进行渲染

关于ruby-on-rails - Rails 嵌套关联。在渲染 :json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com