Lorsque vous utilisez form_for
:
Dans votre cas, Video
maquette. Pour comprendre la convention Rails :
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Ce qui se traduit par une balise html dont l'attribut name est video[description] . Cela signifie que lorsque le formulaire est soumis, la valeur saisie par l'utilisateur sera disponible dans le contrôleur sous la forme params[:video][:description] .
Les params
la variable est une instance de ActiveSupport::HashWithIndifferentAccess
, comme un Hash
avec une petite différence, selon la documentation :
Vos params
est quelque chose comme :
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Où "video"
ou :video
est l'une des clés du Hash. Donc, params[:video]
est équivalent à params.fetch("video")
dont la valeur est {"description"=>"Video desc"}
. Comme vous pouvez le voir, la valeur est un autre hachage. Enfin pour obtenir la valeur de la description il faut params[:video][:description]
(La manière Rails) ou params.fetch("video").fetch("description")
, dont la valeur est "Video desc"
.
fetch
est une méthode Ruby de Hash
:"Renvoie une valeur à partir du hachage pour la clé donnée."
En tenant compte :
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Il est plus facile d'utiliser les conventions, mais vous pouvez certainement avoir params[:description]
(juste au cas où):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Notez que j'utilise text_field_tag
au lieu de f.text_field
. Dans ce cas, le nom de la balise html sera description
dans les params
Hash vous recevrez { "description" => 'Video desc" }
...
Consultez la documentation de l'API Rails pour comprendre les différents assistants, etc. Et aussi consulter le journal de votre serveur.