web-dev-qa-db-fra.com

Essayer d'obtenir un POST pour renvoyer 400 mauvaise requête

J'ai une méthode create qui construit un nouveau modèle via une association et je m'attendais à ce qu'elle retourne une réponse 400 avec du texte si aucun paramètre n'était dans la demande POST. Cependant, j'obtiens une erreur .

C'est dans Rails 4.0.2

méthodes du contrôleur:

  def create
    @cast_profile = current_user.build_cast_profile(cast_profile_params)
    if @cast_profile.save
      redirect_to cast_profile_path
    else
      render :edit
    end
  end

  def cast_profile_params
    params.require(:cast_profile).permit(:name, :email, :public)
  end

Si je passe les paramètres, tout va bien, mais j'essaie de tester le mauvais scénario de demande. Voici l'erreur:

ActionController::ParameterMissing: param not found: cast_profile

Je pouvais le sauver explicitement mais je pensais que des paramètres forts étaient censés le faire automatiquement.

25
kjs3

Le comportement est le suivant:

Traitement des clés non autorisées

Par défaut, les clés de paramètres qui ne sont pas explicitement autorisées seront enregistrées dans l'environnement de développement et de test. Dans d'autres environnements, ces paramètres seront simplement filtrés et ignorés.

En outre, ce comportement peut être modifié en modifiant la propriété config.action_controller.action_on_unpermitted_parameters dans vos fichiers d'environnement. S'il est défini sur: journal, les attributs non autorisés seront enregistrés, s'il est défini sur: lever une exception sera levée.

( source )

Je suggère de sauver de cette exception avec le statut 400 (mauvaise demande):

rescue_from ActionController::ParameterMissing do
  render :nothing => true, :status => :bad_request
end
46
Bart