Environnement d'exploitation Ruby 2.6.5 Rails 6.0.3.2
Lorsque j'utilisais form_with, je faisais souvent une erreur sans remarquer que l'attribut name et l'attribut id étaient automatiquement attribués, alors je l'ai posté.
ruby:new.html.erb
<%= form_with model: @hoge, local: true do |f| %>
<%= f.text_field :fuga %>
<%= f.submit "Publier" %>
<% end %>
Comme mentionné ci-dessus, si vous spécifiez le modèle comme @hoge et vérifiez l'attribut name et l'attribut id avec l'outil de vérification, ce sera ** name = "hoge [fuga]", id = "hoge_fuga" **. Même si le nom et l'id ne sont pas spécifiés, les attributs de nom et d'id sont automatiquement attribués.
Dans le code précédent, il était dit que si l'attribut name et l'attribut id ne sont pas spécifiés, ils sont automatiquement attribués, mais voyons ce qui se passe lorsque l'attribut name et l'attribut id sont spécifiés.
ruby:new.html.erb
<%= form_with model: @hoge, local: true do |f| %>
<%= f.text_field :fuga, name:"hogera", id:"piyo" %>
<%= f.submit "Publier" %>
<% end %>
Comme précédemment, si vous vérifiez l'attribut name et l'attribut id avec l'outil de vérification, ce sera ** name = "hogera", id = "piyo" **. Autrement dit, les attributs name et id sont tels que spécifiés.
Ensuite, voyons ce qui se passe si nous spécifions une URL au lieu de spécifier un modèle.
ruby:new.html.erb
<%= form_with url: hoges_path, local: true do |f| %>
<%= f.text_field :fuga %>
<%= f.submit "Publier" %>
<% end %>
Comme précédemment, si vous vérifiez l'attribut name et l'attribut id avec l'outil de vérification, ce sera ** name = "fuga", id = "fuga" **. Une chose à noter ici est que les attributs name et id sont différents de ceux du modèle spécifié. Fondamentalement, si l'action que vous souhaitez effectuer sur le contrôleur est la même, le résultat ne changera pas si vous spécifiez le modèle ou l'URL, mais l'attribut name et l'attribut id sont différents.
En passant, si vous spécifiez à la fois model et url, les attributs name et id seront les mêmes que si vous spécifiez model.
J'ai été surpris d'apprendre cela car je pensais que les attributs name et id ne seraient pas accordés à moins d'être spécifiés. De plus, j'avais l'habitude d'obtenir l'attribut de nom en utilisant JavaScript, mais à ce moment-là, j'ai lutté avec l'erreur pendant des heures sans remarquer la différence entre l'attribut de nom lorsque le modèle était spécifié et le moment où l'URL était spécifiée. Il y avait un cas où cela finirait.
Ne vaut-il pas mieux spécifier à la fois l'attribut name et l'attribut id dès le début pour éviter une telle erreur? J'ai pensé, mais en premier lieu, il est automatiquement donné pour réduire la quantité de description, il semble donc que j'utilise souvent celui qui est donné automatiquement sans le spécifier moi-même.