【问题标题】:How can I create multiple records in Rails using single POST request?如何使用单个 POST 请求在 Rails 中创建多个记录?
【发布时间】:2015-10-15 21:30:34
【问题描述】:

我有一个使用 rails 中的脚手架生成的 rails api。 我在这个 api 中有一个产品模型。为了测试我的 api,我正在使用 curl 创建产品,目前我一次只能使用 curl 命令创建一个产品

curl -i -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"product: {"name":"Felix" }}' http://localhost:3000/products.json

现在我想修改我的 api,使其可以从一个发布请求创建多个产品,以便可以执行类似的请求,并且我可以在一个请求中创建多个产品。

 curl -i -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{products: {"product": {"name":"Felix" }, {"product": {"name":"Felix" } }' http://localhost:3000/products.json

我在两件事上需要帮助

1)如何修改我的创建函数(由脚手架生成),以便它可以创建接受产品数组(数组的长度可以是可变的)并为它们创建多条记录

2) 传递给 curl 以测试实现的功能的数据散列

【问题讨论】:

  • create 方法可以接受一个哈希数组,并会尝试根据哈希的属性创建每个对象,api.rubyonrails.org/classes/ActiveRecord/Persistence/…
  • 你能告诉我应该如何在 json 哈希中传递多个产品的数组吗?
  • 可能像'{"product":[{"name":"Felix1"},{"name":"Felix2"}]}'
  • 如果我不更改我的创建操作并将其传递给我的 curl 命令,那么我会收到此错误 NoMethodError (undefined method `permit' for [{"name"=>" Felix1"}, {"name"=>"Felix2"}]:Array)

标签: ruby-on-rails curl activerecord


【解决方案1】:

在 ActiveRecord#create 方法的源代码中,您可以看到它循环遍历数组。你可以自己做这样的事情来包含强参数。

def create
  if params[:product].is_a? Array
    params[:product].map { |hash| Product.create(product_params(hash)) }
  else
    # normal action
  end
  # handle redirects and renders
end

private

def product_params(hash_of_params)
  # return results of strong params
end

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2013-12-09
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多