[RUBY] Attribution automatique des attributs name et id par form_with

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é.

Exemple spécifique où le modèle est spécifié dans form_with et l'attribut name et l'attribut id sont automatiquement attribués

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.

Exemple spécifique de spécification de l'attribut name et de l'attribut id à l'aide de form_with

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.

Exemple spécifique où l'url est spécifiée dans form_with et l'attribut name et l'attribut id sont automatiquement attribués

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.

Recommended Posts

Attribution automatique des attributs name et id par form_with
Obtenez l'ID de la numérotation automatique
Introduction et précautions de Gem Friendly Id
Obtenez le nom de classe et le nom de méthode du contrôleur exécuté par le HandlerInterceptor de Spring Boot