2016-02-19 4 views
0

Я новичок в 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 [: корзины], и итерация над ним.

+0

С какой проблемой вы столкнулись? –

+0

Тест вызывает эту ошибку: 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] –

+0

У вас есть params.require (: basket) или params.require [: корзина]? Ваш комментарий говорит один, но вопрос говорит другой –

ответ

-1

Иногда ключи параметров не преобразуются в символы автоматически. Можете ли вы попробовать передать строку "basket" вместо символа :basket?

+0

def user_params params.require (: id) end –

 Смежные вопросы

  • Нет связанных вопросов^_^