2015-05-03 12 views
7

Sviluppatore Java per molto tempo, nuovo di zecca - Sto costruendo un'API JSON REST in Rails 4 e ho riscontrato problemi utilizzando parametri forti. Quando eseguo una richiesta POST HTTP a uno dei miei endpoint, vorrei che il mio controller richieda l'oggetto principale, richieda alcuni dei suoi attributi e, se alcuni altri attributi sono presenti, che restituisca anche quelli. Visto che quelli richiedono e consentono metodi restituiscono hash, mi chiedo quale sia la migliore pratica sia per consentire e richiedere determinati attributi dello stesso oggetto. Dovrei forse unire i due hash? Grazie mille per il vostro contributo, poiché ho trascorso un po 'di tempo a lavorare su questo problema.Rails 4 Richiedi e permetti multiplo

risposta

14

In base alle mie conoscenze, penso che la strada da percorrere sia quella di consentire solo parametri nel controller e quindi eseguire la convalida dell'attributo nel modello anziché direttamente nel controller sui parametri.

Forti parametri sono solo lì per garantire, che una persona malintenzionata non hackerare il tuo modulo utente e inserire qualcosa come "role = admin".

Per quanto ne so, la funzionalità di parametri forti non è progettata con l'intento di richiedere effettivamente alcuni parametri per essere presente diversa dalla singola chiave contenente l'hash di attributi (come il modello chiave chiamato utente o allo stesso modo).

Si può fare di convalida nel modello come questo:

class User < ActiveRecord::Base 
    validates :email, :first_name, :last_name, presence: true 
end 

Se si usa qualcosa come simple_form, quindi sarà anche mostrato automaticamente gli errori.

C'è un ragazzo qui, che suggerisce più richieste prima del permesso effettivo. La mia opinione personale è che è molto brutto.

Strong parameters require multiple

def user_params 
    params.require(:user).require(:first_name) 
    params.require(:user).require(:last_name) 
    params.require(:user).permit(:first_name, :last_name) 
end 
+0

Grazie tu- proprio quello che stavo cercando! – svarlamov