gpt4 book ai didi

ruby-on-rails - 在 ruby​​ 中自定义 as_json 响应

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:22 24 4
gpt4 key购买 nike

我正在用 ruby​​ 构建 rest API

我正在使用 @object.as_json() 以 json 格式响应

as_json 中传输数据时,我卡在了中间。我需要更多地自定义响应

我正在列出我到底想要什么以及我遇到困难的地方

我正在使用下面的代码

@videos = Video.all.map{|m| m.as_json(
only: [:title],
method: [:watch_count],
include: {
user: {
only: [:first_name],
method: [:role]
}
}
).merge(
is_upvoted: m.is_upvoted(current_user)
) }

但我需要自定义它。

1- 我需要在视频和用户对象中传递手动键和值(不在数据库中),目前视频可以,但用户不行。父对象及其子关联对象应该是可能的。我不想使用 :method 相同

2-我需要在 :method 中传递参数,比如视频模型有一个方法 is_upvoted 但有一个像当前用户这样的参数。所以我无法在 :method 中传递参数。目前我可以像现在一样处理合并,但不能使用用户对象。

3- 我需要在使用 include 时更改 key 名称:{user: {method: []}}。我需要在“用户”的位置使用 key “所有者”

提前致谢

最佳答案

您可以使用 JBuilder 来做到这一点,它更加灵活并且允许从您的列表中制作所有东西。结果代码将是这样的:

@videos = JBuilder.encode do |json|
json.array! Video.all do |video|
json.(video, :title, :watch_count)
json.is_upvoted video.is_upvoted(current_user)

json.owner do
json.(video.user, :first_name, :role)
json.field video.user.with_param(some_param)
end
end
end

您可以在 documentation 中找到有关 JBuilder 的详细信息.

关于ruby-on-rails - 在 ruby​​ 中自定义 as_json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245533/

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