【问题标题】:JSON for passing multiple records to POST request to rails API create action?JSON 用于将多个记录传递到 POST 请求到 Rails API 创建操作?
【发布时间】:2019-07-10 08:41:36
【问题描述】:

我有一个使用

构建的简单 API
rails new my_api --api

然后

rails g scaffold Model name age

我可以像这样使用 curl POST 请求创建新记录

curl -H "Accept: application/json" -H "Content-type: application/json" -d '{"name": "Fred", "age": "5"}' "http://localhost:3000/model_name"

问题

是否可以在同一个 POST 请求中提交多个新记录?如果是这样,JSON 应该是什么样的?

到目前为止我已经尝试过什么

我尝试过{"name": "Fred", "age": "5"} 的变体,例如{"name": ["Fred", "Mary"], "age": ["5", "6"]}

API 不会拒绝此 JSON,而是创建 1 条记录(不是 2 条),其值为 nil 而不是实际数据。

注意

当前控制器代码是

  def create
    @model = Model.new(model_params)

    if @model.save
      render json: @model, status: :created, location: @model
    else
      render json: @model.errors, status: :unprocessable_entity
    end
  end

【问题讨论】:

  • 您是否尝试过在请求中传递哈希数组(多条记录)?
  • @Ni3 不,我没有,我对 curl 很陌生,以上是我所知道的
  • @user5783745 给您的另一个提示:尝试使用POSTMAN 应用程序提出您的请求。在构建 API 时非常有用
  • @LucasWieloch 我不知道这颗宝石。谢谢,下次试试:)

标签: ruby-on-rails rails-api


【解决方案1】:

简短的回答,是的。

您构建了 API,准确定义了 POST 请求将接收什么以及它将如何处理它。 Rails scaffold 自动生成的 create 方法不会在 JSON 中一次接受多个记录。您必须打开由rails scaffold 生成的controller 文件并将其更改为接受多条记录。

还有一点提示,试试这个结构,用于具有多条记录的 JSON

[{"name": "Fred", "age": "5"}, {"name": "Fred", "age": "5"}, {"name": "Fred", "age": "5"}]

【讨论】:

  • 我将控制器代码弹出到上面的问题中。是否可以显示您建议的最小实现?
  • 只需删除行@model = Model.new(model_params)并将if @model.save更改为if Model.create(model_params)。这应该可以解决问题,尽管我很确定您需要更改 model_params 方法以允许新的 JSON 参数数组。检查docs,他们非常有帮助
  • 我现在试试。
  • 我对控制器进行了更改。但我得到Completed 400 Bad Request in 10ms (ActiveRecord: 32.1ms),然后是ActionController::ParameterMissing (param is missing or the value is empty: model。我在文档中看不到如何修改 model_params 以接受 JSON 数组?当前方法是params.require(:model).permit(:name, :age)
  • here
猜你喜欢
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多