如何向我的 Rails API 中的 JSON 响应添加其他属性
How to add additional attributes to the JSON response in my Rails API
我正在为我的应用程序使用 Rails 5.2。
要求:
http://localhost:3000/reports
回复:
[
{
id: 1,
name: "Ram",
details: {
path: "dev/daily_summary_20190503.csv",
success_detail: "Report uploaded to S3"
},
status: "success"
},
{
id: 2,
name: "John",
details: {
path: "dev/daily_summary_20190504.csv",
error_detail: "Error in uploading report. Refer log for details"
},
status: "failed"
}
]
我想将 download_url 消息参数添加到未将参数添加到架构的每条记录。以下是我的预期输出,
预期输出:
[
{
id: 1,
name: "Ram",
details: {
path: "dev/daily_summary_20190503.csv",
success_detail: "Report uploaded to S3"
},
status: "success",
download_url: "https://<S3_HOST>/dev/daily_summary_20190503.csv",
message: "Report uploaded to S3"
},
{
id: 2,
name: "John",
details: {
error_detail: "Error in uploading report. Refer log for details"
},
status: "failed",
message: "Error in uploading report. Refer log for details"
}
]
我试过使用attr_accessor,但这并不能帮助我在控制器中索引方法的所有记录中显示download_url。
如何为每条记录添加索引和显示参数?
如果您想更改 HTTP 响应中的 JSON,您需要找到生成 JSON 的位置。追踪请求 URL:
- 在命令行中使用
rails routes
- 在输出中,找到您的 url /reports 并读取它映射到的控制器 + 操作
- 打开控制器文件(大概是/app/controllers/reports_controller.rb)找到动作(大概是index)
- 看动作结束
如果你发现这样的 render 语句:
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @reports }
end
您需要关注format.json之后的区块。在这个例子中你看到
显示的数据存储在 @reports 变量中。
研究操作以找出数据是如何创建的。数据是
然后使用模板 /app/views/reports/index.json.jbuilder 渲染。
继续阅读 jbuilder。
在更复杂的应用程序中,可能会使用 ActiveModelSerializer 而不是 jbuilder。
我正在为我的应用程序使用 Rails 5.2。
要求:
http://localhost:3000/reports
回复:
[
{
id: 1,
name: "Ram",
details: {
path: "dev/daily_summary_20190503.csv",
success_detail: "Report uploaded to S3"
},
status: "success"
},
{
id: 2,
name: "John",
details: {
path: "dev/daily_summary_20190504.csv",
error_detail: "Error in uploading report. Refer log for details"
},
status: "failed"
}
]
我想将 download_url 消息参数添加到未将参数添加到架构的每条记录。以下是我的预期输出,
预期输出:
[
{
id: 1,
name: "Ram",
details: {
path: "dev/daily_summary_20190503.csv",
success_detail: "Report uploaded to S3"
},
status: "success",
download_url: "https://<S3_HOST>/dev/daily_summary_20190503.csv",
message: "Report uploaded to S3"
},
{
id: 2,
name: "John",
details: {
error_detail: "Error in uploading report. Refer log for details"
},
status: "failed",
message: "Error in uploading report. Refer log for details"
}
]
我试过使用attr_accessor,但这并不能帮助我在控制器中索引方法的所有记录中显示download_url。
如何为每条记录添加索引和显示参数?
如果您想更改 HTTP 响应中的 JSON,您需要找到生成 JSON 的位置。追踪请求 URL:
- 在命令行中使用
rails routes
- 在输出中,找到您的 url /reports 并读取它映射到的控制器 + 操作
- 打开控制器文件(大概是/app/controllers/reports_controller.rb)找到动作(大概是index)
- 看动作结束
如果你发现这样的 render 语句:
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @reports }
end
您需要关注format.json之后的区块。在这个例子中你看到 显示的数据存储在 @reports 变量中。 研究操作以找出数据是如何创建的。数据是 然后使用模板 /app/views/reports/index.json.jbuilder 渲染。 继续阅读 jbuilder。
在更复杂的应用程序中,可能会使用 ActiveModelSerializer 而不是 jbuilder。