2014-05-20 2 views
1

Dans mon API j'ai un point final à/api/commandesParameterMissing lorsqu'un paramètre est vide dans Rails

Lorsque vous effectuez un appel POST avec le JSON suivant:

{"order":{}} 

-je obtenir un ActionController :: ParameterMissing: param not found: ordre

Ma forte fonction de paramètres ressemble à ceci:

def order_params 
    params.require('order') 
end 

Pourquoi ne pas me laisser passer un vide « ordre », si je fais:

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

Il fonctionne très bien.

Répondre

1

Parce que c'est ainsi que fonctionne .require. Voir l'API: http://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html#method-i-require

Rails ne vérifie pas que la clé existe mais plutôt qu'il existe des paramètres .present? pour cette clé.

La source de .require aide à élucider ceci:

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

Et {}.present? # => false.

Questions connexes