2013-10-16 13 views
10

Così mi sto familiarizzare con entrambe le rotaie, dei binari naturalmente 4.Come apportare modifiche ai parametri forti (cambia in minuscolo)

Quindi questo è quello che ho in fondo il mio controller

def post_params 
    params.require(:post).permit(:title, :content, :category) 
end 

che funziona bene, ma quello che vorrei fare è lavorare fuori come accedere quei parametri singolarmente sia nel metodo post_params, o più tardi nel controller.

In particolare vorrei cambiare il: valore di categoria in minuscolo prima di utilizzare il parametro nella creazione del post (in modo che all'interno della tabella tutte le categorie sono in minuscolo).

EDIT: forse un miglior fraseggio per la mia domanda è, dopo aver permesso i parametri, come posso accedere e manipolarli in seguito .. posso semplicemente usare params [: title] come al solito?

ho cercato

params.require(:post).permit(:title, :content, :category) 
params[:category].downcase 

e

params.require(:post).permit(:title, :content) 
params.require(:post).permit(:category).downcase 

ma ho undefined method 'downcase'

risposta

7

meglio si può utilizzare before_create richiamata per aggiornare il valore.

come,

before_create :check_params 

def check_params 
    self.category.downcase!  
end 
+0

Devi usare! Operatore ... non si aggiornerebbe. –

7

La funzione strong_params è solo di dare il controller una "whitelist" delle variabili con cui lavorare. È davvero per motivi di sicurezza e significa letteralmente che la tua app può accedere ai parametri [: allowed_param] per salvare i dati.


Ci sono 2 cose che si potrebbe fare:

-> Modifica le params [:] categoria variabile prima di chiamare la funzione post_params:

def create 
    params[:category].downcase 
    @post = Post.new(post_params) 
    @post.save 
end 

-> È possibile utilizzare la funzione before_create come raccomandato dal @thiyaram troppo :)

+1

Questa è sicuramente la risposta più utile (per il mio caso, almeno). – dsignr

+1

se '.downcase' non persiste, prova' .downcase! ' –

+0

aggiungendo il! fatto.Ma ha funzionato solo all'interno del metodo di creazione, non all'interno dei post_param, che avevo anche ... Non so perché. – George

1

Eseguire questa operazione: -

before_create :downcase_category 

def downcase_category 
self.category.downcase! 
end 
+0

non si dovrebbero usare le chiamate ai binari in questo modo – gazubi

+0

@bob_d Curioso - perché no? –

2

Se siete on Rails 4 questo non potrebbe funzionare: i parametri che si manomettere non sono più accettati, anche se li whitelist esplicitamente tramite params forti.

Sembra che Rails rileva il cambiamento e impedisce che venga consentito.

Probabilmente un modo migliore è quello di recuperare i valori dei parametri in un'azione di controllo e renderli minuscole:

a = params([:model_name][:id]) 
a.downcase! 
Problemi correlati