我正在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-我需要在视频和用户对象中传递手动键和值(不在db中),目前可以使用视频而不是用户。应该可以使用父对象及其子关联对象。我不想使用:相同的方法
2 - 我需要传递参数in:方法,就像视频模型有一个方法is_upvoted但有一个像当前用户的参数。所以我无法传递参数:方法。目前我可以做我正在做的合并,但用户对象是不可能的。
3-我需要在使用时更改密钥名称包括:{user:{method:[]}}。 我需要使用密钥"所有者"在"用户"
的地方非常感谢提前
答案 0 :(得分:0)
您可以使用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
的详细信息。