如何在对发布请求的Rails API响应中包括一个新创建的模型对象?

时间:2018-11-18 15:53:10

标签: ruby-on-rails rails-api

我有一个Rails API,可以成功处理通过Post请求接收到的数据。在create操作的控制器中,我有以下代码可用于响应:

render json: project, status: 201

但是我的回复不包含project,看起来像这样:

Response {type: "basic", url: "http://localhost:3000/api/save", redirected: false, status: 201, ok: true, …}body: (...)bodyUsed: falseheaders: Headers__proto__: Headersok: trueredirected: falsestatus: 201statusText: "Created"type: "basic"url: "http://localhost:3000/api/save"__proto__: ResponsearrayBuffer: ƒ arrayBuffer()blob: ƒ blob()body: (...)bodyUsed: (...)clone: ƒ clone()formData: ƒ formData()headers: (...)json: ƒ json()arguments: (...)caller: (...)length: 0name: "json"__proto__: ƒ ()[[Scopes]]: Scopes[0]ok: (...)redirected: (...)status: (...)statusText: (...)text: ƒ text()arguments: (...)caller: (...)length: 0name: "text"__proto__: ƒ ()[[Scopes]]: Scopes[0]type: (...)url: (...)constructor: ƒ Response()Symbol(Symbol.toStringTag): "Response"get body: ƒ ()get bodyUsed: ƒ ()get headers: ƒ ()get ok: ƒ ()get redirected: ƒ ()get status: ƒ ()get statusText: ƒ ()get type: ƒ ()get url: ƒ ()__proto__: Object

如何将模型对象包含在对Post请求的响应中,这样我就可以在前端使用它而无需发出另一个请求?

1 个答案:

答案 0 :(得分:1)

首先,请确保您在 routes.rb 中的请求具有{:format => :json},以防您的响应通常采用JSON格式:

post 'create_item' => 'items#create', as: 'public_holidays_by_year', :defaults => {:format => :json}

第二,您需要定义将携带project数据的参数,如下所示:

render json: {status: 201, project: project}

OR

render json: project 

在最后一个选项中,无需定义状态201,因为它将由Rails自动为创建请求创建,请检查以下链接:
https://guides.rubyonrails.org/layouts_and_rendering.html#the-status-option