Ich befolge derzeit ein Tutorial auf Schienen und der Instruktor erklärt die meisten Dinge bisher sehr gut. Zur Zeit lehrt er uns, wie wir unsere eigenen Formulare erstellen, um sie von Grund auf der Datenbank hinzuzufügen, aber ich bin irgendwie verwirrt, was article_params
in unserem Code unten tut, Hier ist der vollständige Code in der articles_controller.rb
Datei, die unsere behandelt FormAktualisieren und Erstellen eines Formulars in Rails (Code verstehen)
class ArticlesController < ApplicationController
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
render plain: article[:id].inspect
if @article.save
flash[:notice] = "Article was sucessfully created"
redirect_to article_path(@article)
else
render 'new'
end
end
def show
@article = Article.find(params[:id])
end
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
flash[:notice] = "Article was sucessfully updated"
redirect_to article_path(@article)
else
render 'edit'
end
end
private
def article_params
params.require(:article).permit(:title,:description)
end
end
ich verstehe, was wir zum größten Teil tun, aber wenn ich das Update und erstellen Aktionen haben, was ist die private Methode article_params
hier? Der Lehrer sagt, dass es für die weiße Liste verwendet wird und fährt fort, mehrere Dinge zu sagen, die ich wirklich nicht verstehen kann. Zum Beispiel warum haben wir if @article.update(article_params)
, aber nicht if @article.save(article_params)
? Wie Sie sehen können, bin ich ziemlich verwirrt darüber.
Vielen Dank!
Gibt es einen bestimmten Grund, warum es privat ist? –
@cresjoy Seine private Ursache, die Sie nie aus anderen Klassen nennen werden. Bedeutung, es wird intern in der Klasse verwendet und darf nicht von den anderen Klassen konsumiert werden. Aus der Dokumentation: "Die Verwendung einer privaten Methode zum Einkapseln der zulässigen Parameter ist nur ein gutes Muster, da Sie die gleiche Liste zwischen Erstellungs- und Aktualisierungsrechten wiederverwenden können. Sie können diese Methode auch mit benutzerspezifischen Überprüfungen spezialisieren zulässiger Attribute. " –
Danke für die Erklärung. Ich glaube, ich verstehe, aber ich erinnere mich, dass ich in einer meiner .erb-Dateien eine Bedingung hatte, die besagt, dass @ articles.errors.any? Zeigen Sie dann die Fehler an. Ich gehe davon aus, dass diese article_params es intern handhabt und dass meine if-Anweisung es nur auf dem Bildschirm anzeigt. –