Betriebsumgebung Ruby 2.6.5 Rails 6.0.3.2
Es hat eine Weile gedauert, bis ich den Unterschied zwischen dem Zeitpunkt, zu dem ein starker Parameter erforderlich ist, und dem Zeitpunkt, zu dem er nicht erforderlich ist, verstanden habe. Deshalb habe ich ihn veröffentlicht.
ruby:new.html.erb
<%= form_with model:@hoge, local: true do |f| %>
<%= f.text_area :fuga %>
<%= f.submit "Post" %>
hoges_controller.rb
def create
@hoge = Hoge.create(hoge_params)
end
private
def hoge_params
params.require(:hoge).permit(:fuga)
end
Im obigen Fall ist require (: hoge) für den strong-Parameter erforderlich. Dies liegt daran, dass Fuga in der Liste der Parameter enthalten ist, die gesendet werden, wenn Sie auf "Posten" klicken. Wenn Sie die Parameter in der Aktion "create" mit "binding.pry" überprüfen, sieht dies tatsächlich wie folgt aus. Angenommen, Sie haben "Beispiel" in Fuga eingegeben.
{"authenticity_token" => "+ wXNK4Z3C0wrq4AfslPS5zl / 2LSUE6BvV + 23hQpkHryrsVzPb0siDIkarIsNYLK2R502fuXlqQ =" "," action "=>" create "}
ruby:new.html.erb
<%= form_with url:hoge_path, local: true do |f| %>
<%= f.text_area :fuga %>
<%= f.submit "Post" %>
hoges_controller.rb
def create
@hoge = Hoge.create(hoge_params)
end
private
def hoge_params
params.permit(:fuga)
end
Im obigen Fall muss der starke Parameter nicht erforderlich sein. Dies liegt daran, dass hoge in den Parametern, die beim Klicken auf Post gesendet werden, nicht vorhanden ist und fuga direkt enthalten ist. Wenn Sie die Parameter in der Aktion "create" mit "binding.pry" überprüfen, sieht dies tatsächlich wie folgt aus. Angenommen, Sie haben "Beispiel" in Fuga eingegeben.
{"authenticity_token" => "+ wXNK4Z3C0wrq4AfslPS5zl / 2LSUE6BvV + 23hQpkHryrsVzPb0siDIkarIsNYLK2R502fuXlqQ ==", "fuga" => "Example", "commit" = "" "erstellen"}
Wie oben erwähnt, können Sie sehen, dass Hoge nicht anders als zuvor existiert.
Mit anderen Worten, es stellt sich heraus, dass der starke Parameter require verwendet wird, um das, was Sie in params (in diesem Fall fuga) eingegeben haben, aus einem Element (in diesem Fall hoge) herauszuholen.
Grob gesagt ist require erforderlich, wenn model in form_with angegeben ist. Wenn Sie es nicht angeben, können Sie sagen, dass require nicht erforderlich ist.
Recommended Posts