使用一个http请求创建多个对象

时间:2015-03-16 09:01:46

标签: ruby-on-rails activerecord strong-parameters

我有一个带json api的rails应用程序。到目前为止,我可以通过POST请求创建单个对象。

这很简单:

def create
    customer = Customer.new(customer_params)
    if customer.save
        render json: customer, status: 201
    else
        render json: customer.errors, status: 422
    end
end

private
        def customer_params 
            params.require(:customer).permit(:name, :city)
        end

现在我想通过在http请求中传递数组来创建多个客户。像这样:

{
"customer": [
    {
        "name": "foo",
        "city": "New York"
    },
    {
        "name": "bar",
        "city": "Chicago"
     }
  ]
}

但是,我不知道如何处理这个问题。第一个问题是我的强参数函数不接受数组。 有没有办法使用强参数,让我循环遍历数组?

1 个答案:

答案 0 :(得分:2)

我会将其视为一种新的控制器方法

类似的东西:

def multi_create
  render json: customer.errors, status: 422 and return unless params[:customers]
  all_created = true
  customers = []
  params[:customers].each do |customer_params|
    customer = Customer.create(name: customer_params[:name], city: customer_params[:city])
    customers << customer
    all_created &&= customer.valid?
  end

  if all_created
    render json: customers, status: 201
  else
    render json: customers.map(&:errors), status: 422
  end 
end

您还需要添加路线。然后你可以将你的json发布到那条路线,最外面的密钥应该是customers

我不会在没有任何更改的情况下运行此代码,但您会得到一般的想法。你可以根据自己的喜好重构它。