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.