Wenn Sie form_for
verwenden :
In Ihrem Fall Video
Modell. So verstehen Sie die Rails-Konvention:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Was zu einem HTML-Tag führt, dessen Namensattribut video[description] ist . Das bedeutet, dass beim Absenden des Formulars der vom Benutzer eingegebene Wert im Controller als params[:video][:description] verfügbar ist .
Die params
Variable ist eine Instanz von ActiveSupport::HashWithIndifferentAccess
, wie ein Hash
mit einem kleinen Unterschied, laut Dokumentation:
Ihre params
ist so etwas wie:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Wobei "video"
oder :video
ist einer der Schlüssel des Hash. Also params[:video]
entspricht params.fetch("video")
welcher Wert ist {"description"=>"Video desc"}
. Wie Sie sehen können, ist der Wert ein weiterer Hash. Um schließlich den Wert der Beschreibung zu erhalten, müssen Sie params[:video][:description]
eingeben (The Rails way) oder params.fetch("video").fetch("description")
, dessen Wert "Video desc"
ist .
fetch
ist eine Ruby-Methode von Hash
:"Gibt einen Wert aus dem Hash für den angegebenen Schlüssel zurück."
Unter Berücksichtigung dessen:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Es ist einfacher, Konventionen zu verwenden, aber Sie können sicher params[:description]
verwenden (nur für den Fall):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Beachten Sie, dass ich text_field_tag
verwende statt f.text_field
. In diesem Fall lautet der Name des HTML-Tags description
in den params
Hash erhalten Sie { "description" => 'Video desc" }
...
Sehen Sie sich die Rails-API-Dokumentation an um verschiedene Helfer zu verstehen usw. Und überprüfen Sie auch das Protokoll Ihres Servers.