我有一个带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"
}
]
}
但是,我不知道如何处理这个问题。第一个问题是我的强参数函数不接受数组。 有没有办法使用强参数,让我循环遍历数组?
答案 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
。
我不会在没有任何更改的情况下运行此代码,但您会得到一般的想法。你可以根据自己的喜好重构它。