【问题标题】:How to add additional attributes to the JSON response in my Rails API如何在我的 Rails API 中向 JSON 响应添加其他属性
【发布时间】:2019-05-04 06:23:50
【问题描述】:

我正在为我的应用程序使用 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。

如何为每条记录添加索引和显示参数?

【问题讨论】:

    标签: ruby-on-rails model-view-controller optional-parameters


    【解决方案1】:

    如果您想更改 HTTP 响应中的 JSON,您需要找到生成 JSON 的位置。追踪请求 URL 中的线索:

    • 在命令行使用rails routes
    • 在输出中,找到您的网址 /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。

    【讨论】:

    猜你喜欢
    • 2011-11-20
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多