2013-10-16 3 views
10

Also ich bin ich vertraut mit den beiden Schienen und natürlich Schienen 4.Wie Änderungen an starken Parameter (Änderung klein geschrieben)

Also das ist, was ich am Ende meines Controller haben

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

Was gut funktioniert, aber was ich tun möchte, ist herauszufinden, wie man auf diese Parameter entweder in der post_params-Methode oder später im Controller einzeln zugreifen kann.

Insbesondere möchte ich den: category Wert in Kleinbuchstaben ändern, bevor Sie den Parameter beim Erstellen des Beitrags verwenden (so dass innerhalb der Tabelle alle Kategorien in Kleinbuchstaben sind).

EDIT: Vielleicht ist eine bessere Formulierung meiner Frage, nachdem ich die Parameter zugelassen habe, wie kann ich darauf zugreifen und sie manipulieren..kann ich einfach params [: title] wie gewohnt benutzen?

Ich habe

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

und

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

Aber ich bekomme undefined method 'downcase'

Antwort

7

Better You before_create Rückruf verwenden können, um den Wert zu aktualisieren.

wie

before_create :check_params 

def check_params 
    self.category.downcase!  
end 
+0

Sie haben zu verwenden! Operator..else würde es nicht aktualisieren. –

7

Die strong_params Funktion ist nur über Ihren Controller eine „weiße Liste“ von Variablen geben, mit zu arbeiten. Es ist wirklich für Sicherheitszwecke gedacht und bedeutet buchstäblich nur, dass Ihre App auf params [: admined_param] zugreifen kann, um die Daten zu speichern.


Es gibt zwei Dinge, die Sie tun können:

-> die params bearbeiten [: Kategorie] Variable, bevor Sie die post_params Funktion aufrufen:

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

-> Sie nutzen könnten die before_create Funktion als auch von @thiyaram empfohlen diese :)

+1

Dies ist definitiv die hilfreichste Antwort (für meinen Fall, atleast). – dsignr

+1

Wenn '.docase 'nicht persistent ist, versuchen Sie' .downcase! ' –

+0

, indem Sie das! erledigt.Aber es funktionierte nur innerhalb der create-Methode, nicht innerhalb der post_params, die ich auch hatte ... Nicht sicher warum. – George

1

Do: -

before_create :downcase_category 

def downcase_category 
self.category.downcase! 
end 
+0

sollten Sie keine Rails Callbacks auf diese Weise verwenden – gazubi

+0

@bob_d Neugierig - warum nicht? –

2

Wenn Sie auf Rails 4 sind, funktioniert dies möglicherweise nicht: Die Parameter, die Sie manipulieren, werden nicht länger akzeptiert, auch wenn Sie sie explizit über starke Parameter auf die weiße Liste setzen.

Es sieht so aus, als ob Rails die Änderung erkennt und verhindert, dass es zugelassen wird.

Eine bessere Methode ist es, die Werte aus den Parametern in eine Controller-Aktion zu holen und sie machen Kleinbuchstaben:

a = params([:model_name][:id]) 
a.downcase! 
Verwandte Themen