2017-08-25 2 views
1

ich einen factor Controller haben die Faktorwerte für zwei verschiedene Arten von FaktorenRails überprüfen, ob params in der Steuerung existieren

  1. Primary Factor
  2. zweitrangiger Faktor

Und ich geben sie nimmt als Parameter wie folgt:

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 

Aber in dem oben genannten, wenn ich versuche, zu bestehen ein secondary_factor bekomme ich folgende Fehlermeldung:

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' 

mir So scheint es, dass dieser Fehler kommen wird, weil ich keine Werte für primary_factor_params in diesem Zustand hatte und das ist so, wie es den Fehler wirft wegen der ersten wenn Bedingung.

Ich habe versucht:

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

Aber sie alle den gleichen Fehler werfen, da primary_factor_params existiert nicht. Gibt es eine Möglichkeit, dies zu testen, ohne einen Fehler für fehlende Params zu liefern?

Antwort

3

Das Problem ist, diese Linie params.require(:primary) sagen, dass der Parameter erforderlich ist, so versucht, helfen Sie nicht zu tun, wie params.require(:primary).exists? wenn Sie keine :primary param überhaupt haben, weil die require bereits gescheitert.

Sie müssen seine Existenz unter params selbst überprüfen. Zum Beispiel params.has_key?(:primary).

Abhängig von Ihrem Anwendungsfall können Sie auch params.permit(:primary) direkt unter params verwenden. Ausführliche Informationen dazu, wie ActionController::Parameters (die Klasse für params) verwendet werden kann, finden Sie in der API-Dokumentation.

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

+0

Ja, macht dies durchaus Sinn, ich auf die Tatsache ausgeblendet, dass ich auf 'params' testen müssen, weil' primary_factor_params' gar nicht in diesem Fall existieren würde – anonn023432

Verwandte Themen