2013-04-26 18 views
5

È possibile contrassegnare un singolo attributo di un hash come richiesto utilizzando parametri forti?Parametri forti che richiedono un attributo

ingresso Dato come:

{ 
    "example" => { 
    "optional": 1234, 
    "required": 5678 
    } 
} 

Gli params forti esempi standard sono:

params.require(:example).permit(:optional, :required)

Dato che è possibile richiedere alcuni parametri, ho pensato che il seguente dovrebbe funzionare:

params.require(:example).require(:required) 
params.require(:example).permit(:optional) 

Ho provato:

params.require(:example => [ :required ]).permit(:optional) 
params.require(:example).permit(:optional) 
params[:example].require(:required) 

E qualsiasi altra cosa a cui possa pensare.

Qualcuno sa se è possibile?

risposta

5

Greg!

Ho avuto la stessa domanda, ma in fondo ho trovato, che la sua domanda non appropriata.

Guardate, ecco il codice sorgente di richiedere metodo strong_parameters gemma:

def require(key) 
    self[key].presence || raise(ActionController::ParameterMissing.new(key)) 
end 

Quindi, in sostanza, non v'è alcun modo per richiedere attributo "obbligatorio" in params hash. Ma guardalo da un altro lato. Penso che sia meglio scrivere il tuo metodo di richiesta per farlo. Dal momento che sto usando le rotaie, ho appena aggiunto validates_presence_of al modello. Se vuoi renderlo dinamico, puoi creare una convalida personalizzata. È possibile trovare la documentazione qui:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations

+0

Grazie a RunFor. Sono arrivato alla stessa conclusione. Nel mio caso il requisito di presenza è condizionato al modo in cui l'accesso alla risorsa (ad esempio tramite il controller), ma sono stato in grado di mettere alcune convalide condizionali per aiutare con questo. –

0

Che cosa si può fare è utilizzare

def example_params 
    params.require(:example) 
    params[:example].require(:required) 
    params.require(:example).permit(:required, :optional) 
end 

La prima linea non riesce se :example manca. La seconda riga ha esito negativo se manca :required da :example. La terza riga restituisce quello che ti aspetti, pur consentendo :optional.

Problemi correlati