Я новичок в rails, Пожалуйста, проверьте мой код и скажите мне, что не так с моими параметрами использования, потому что это имеет смысл для меня. Контроллер:Params for json array in Rails
def create
user = User.find(user_params)
order = user.purchases.new
render json: order.errors if !order.save
basket = params.require(:basket)
basket.each do |b|
i = Item.find(b[:item_id])
render json: i.errors, status: 422 if !i
order.purchases_items.create(item_id: i, quantity: b[:quantity])
end
render nothing: true, status: 201 # location: show action
end
и мой тестовый файл посылает
test "making order" do
post "/api/users/#{@tuser.id}/orders",
{ basket: [ { item_id: '2', quantity: '5' },
{ item_id: '1', quantity: '4'} ] }.to_json,
{ 'Accept' => Mime::JSON, 'Content-Type' => Mime::JSON.to_s }
assert_response 201
assert_equal Mime::JSON, response.content_type
end
Спасибо, Что я в принципе хочу сделать, это сохранить каждый элемент массива в корзине массива из Params [: корзины], и итерация над ним.
С какой проблемой вы столкнулись? –
Тест вызывает эту ошибку: 1) Ошибка: Api :: MakingOrderTest # test_making_order: ArgumentError: неправильное количество аргументов (0 для 1) приложение/контроллеры/api/order_controller.rb: 18: в 'create ' test/integration/api/orders/making_order_test.rb: 10: в 'block in ', где строка 18 - корзина = params.require [: basket] –
У вас есть params.require (: basket) или params.require [: корзина]? Ваш комментарий говорит один, но вопрос говорит другой –