2014-05-20 4 views
1

В моем API у меня есть конечная точка в/API/заказахParameterMissing когда параметр пуст в Rails

При выполнении POST вызова со следующей JSON:

{"order":{}} 

Я получаю ActionController :: ParameterMissing: парам не найдено: заказ

Моя сильная функция параметров выглядит следующим образом:

def order_params 
    params.require('order') 
end 

Почему не давая мне пройти пустой «порядок», если я:

{"order":{"test":"value"}} 

Он отлично работает.

ответ

1

Потому что это как .require работ. См. API: http://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html#method-i-require

Rails не гарантирует, что ключ существует, но, скорее, есть параметры .present? для этого ключа.

Источником .require помогает выяснить это:

# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 182 
def require(key) 
    self[key].presence || raise(ParameterMissing.new(key)) 
end 

И {}.present? # => false.

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