De nombreuses personnes déplacent leur apprentissage des tutoriels Progate vers Rails.
Le formulaire est difficile même dans Progate. Il est vraiment difficile de s'inscrire ou de se connecter en utilisant le formulaire.
Cependant, Progate est toujours écrit de manière facile à comprendre.
Créez un formulaire avec form_tag, envoyez des données avec et recevez les données avec des paramètres. Très facile à comprendre.
Cependant, quand j'ai commencé à apprendre sérieusement Rails, j'ai arrêté d'utiliser form_tag et utilisé form_with. À partir de cette zone, la quantité de description de Rails diminuera fortement. Le degré de compréhension est également considérablement réduit.
Cet article s'adresse à ceux qui suivent un parcours d'apprentissage comme le tutoriel Rails de Progate et qui ne comprennent tout simplement pas form_with.
J'écrirai en comparant comment écrire Progate et comment écrire Rails.
En conclusion, je pense que le style d'écriture de Progate vise un "style d'écriture cohérent" pour les débutants. À l'origine, quand il y a un changement dans la base de données, form_tag
n'est pas utilisé. Utilisez form_for
.
Si vous l'implémentez avec `` form_tag '', qui est souvent utilisé dans Progate, ce sera très fait à la main.
Quant au flux,
<%= form_tag("/users/create") do %>
<p>Nom d'utilisateur</p>
<input name="name" value="<%= @user.name %>">
<p>adresse mail</p>
<input name="email" value="<%= @user.email %>">
<input type="submit" value="s'inscrire">
<% end %>
Définissez le chemin avec form_tag. Définissez le chemin vers / users / create. A ce moment, dans le routage (routes.rb),
C'est écrit, n'est-ce pas? Ainsi, l'action de création dans users_controller.rb sera déclenchée. Le contenu de l'action de création est le suivant.
def create
@user = User.new(name: params[:name], email: params[:email])
if @user.save
flash[:notice] = "L'enregistrement de l'utilisateur est terminé"
redirect_to("/users/#{@user.id}")
else
render("users/new")
end
end
Ça ressemble à ça.
Le flux est facile à saisir, n'est-ce pas? Je reçois ce que j'ai envoyé du formulaire sous forme de paramètres et je l'enregistre en utilisant @ user.save, afin de pouvoir les comprendre logiquement.
Si vous passez au tutoriel Rails à partir d'ici, vous n'utiliserez plus form_tag
.
C'est parce que la façon dont Progate est écrit est exceptionnelle.
Je n'utilise pas comment écrire un progate.
form_tag
n'est pas utilisé lors d'un nouvel enregistrement, modification ou suppression dans la base de données.
Lors de l'édition de la base de données, utilisez form_for
.
Prenez un objet de modèle (un objet (instance) créé à partir du modèle User, tel que @ user = User.new) comme argument.
Au moment de form_tag
, je faisais la chose gênante de récupérer les informations d'identifiant de: id, de trouver l'enregistrement dans la base de données et de modifier ces informations.
Il y avait un tel processus.
Cependant, le grand avantage de Rails est que @user a également automatiquement un ID utilisateur.
Rails est fortement en boîte noire, donc
Spécifiez la destination avec form_tag.
Lorsque vous utilisez des aides liées aux formulaires avec Ruby on Rails dans Progate, vous avez utilisé form_tag, n'est-ce pas?
À ce moment-là, je suis resté coincé dans l'omission. Progate écrit tout de toute façon. Forme
form_with
est une combinaison de form_tag
et de form_for
.
form_tag a spécifié le chemin.
form_for a spécifié un objet de modèle (une instance créée à partir d'un modèle).
C'est form_with
que vous pouvez utiliser les deux.
form_tag
<%= form_tag 'chemin' do %>
<contribution ...
<contribution ...
<% end %>
Contrairement à l'écriture
form_for est
<%= form_for(@user) do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
Comme vous pouvez le voir, il est ennuyeux d'écrire différemment même si la forme est similaire. En créant tout form_with et en essayant d'unifier le style d'écriture, il est devenu un.
Cependant, ceux qui ont appris Progate ont appris form_tag, donc
"Quoi? Est-ce un modèle comme argument de forme?"
Je suis confus. Nous avons mis l'action et sommes venus.
La grande chose à ce sujet est que form_with model: @ user
et model sont égoïstes.
Lorsque vous le faites avec form_tag, vous avez spécifié l'action.
<% = form_tag (" / users / create ") do%>
Ceci est la partie. L'action de création est spécifiée.
Cependant, lors de l'écriture du modèle: @user,
Lors de l'inscription en tant que nouvel utilisateur, Cela appellera une nouvelle action
De cette manière, il modifie l'action à appeler avec précaution. Rails possède de nombreuses fonctionnalités qui vous font gagner du temps et des efforts.
Tout d'abord, vous recevrez: des informations d'identification de l'URL. Ensuite, identifiez l'utilisateur à partir des informations d'identification
Ceci: Tout le travail de récupération de l'identifiant est inutile. En fait, Rails fait tout automatiquement. Cependant, Progate a tout ignoré lors de l'apprentissage initial,
"Je ne suis pas sûr, mais Rails fera tout."
C'est difficile à comprendre, alors il l'explique bien.
-Form_tag est utilisé lorsqu'il n'y a pas de changement dans la base de données ・ Form_for est utilisé lors de la création d'un formulaire qui implique la mise à jour de la base de données. ・ Form_with peut jouer les deux rôles
Rails est très attentif. Il fera diverses choses sans permission.
"Je l'ai finalement fait sans qu'on me le dise."
Je dirais. Mais au début
«Pourquoi avez-vous décidé cela?
Vous vous demandez peut-être. Je suis toujours confus par l'esprit de Rails.
Cependant, je ne pense pas qu'il y ait quelque chose de plus pratique et de plus fiable lorsque vous pouvez le maîtriser. Faisons de notre mieux pour que nous puissions le maîtriser.