2017-08-25 2 views
1

j'ai un contrôleur factor qui prend des valeurs de facteur pour deux types de facteurs différentsRails vérifier si params existent dans le contrôleur

  1. Facteur primaire
  2. facteur secondaire

Et je passe eux params comme suit:

class FactorController < AdminController 

    def create 
    if primary_factor_params        ## LINE 5 
     do something 
    elsif secondary_factor_params 
     do something else 
    end 
    end 

    def primary_factor_params 
    params.require(:primary).permit(:user_id,   ## LINE 70 
              :primary_factors) 
    end 

    def secondary_factor_params 
    params.require(:secondary).permit(:user_id, 
             :secondary_factors) 
    end 
end 

Mais dans le dessus quand j'essaie de passer un secondary_factor je reçois l'erreur suivante:

ActionController::ParameterMissing (param is missing or the value is empty: primary): 
    app/controllers/factors_controller.rb:70:in `primary_factor_params' app/controllers/api/v1/admin/factors_controller.rb:5:in `create' 

Donc, pour moi, il semble que cette erreur est à venir parce que je n'ai aucune valeur pour primary_factor_params dans cet état et c'est comme ça jette l'erreur à cause de la première si condition.

J'ai essayé:

primary_factor_params.exists? 
primary_factor_params.has_key?(:primary_factors) 
.... 

Mais tous jeter la même erreur depuis primary_factor_params n'existe pas. Existe-t-il un moyen de tester cela sans lancer une erreur pour les params manquants?

Répondre

3

Le problème est cette ligne params.require(:primary) dire que le paramètre est nécessaire, afin d'essayer de faire comme params.require(:primary).exists? vous aidera pas si vous ne disposez pas d'un :primary du tout parce que param le require déjà échoué.

Vous devez vérifier son existence sur params lui-même. Par exemple params.has_key?(:primary). En fonction de votre cas d'utilisation, vous pouvez également utiliser directement params.permit(:primary) sur params. Voir les documents API pour des informations détaillées sur la façon dont ActionController::Parameters (la classe pour params) peut être utilisée.

http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit

+0

Oui, cela a un sens parfait, j'obturé sur le fait que je dois tester sur '' params' parce primary_factor_params' n'existerait pas dans ce cas tout – anonn023432