Au début de l'apprentissage de Rails, je ne pouvais pas comprendre le flux de form_with, donc je vais le résumer. Rails 5.2.4.
Je suis sûr qu'il y a des gens qui disent: "Rassemblez-vous vite!", Donc je vais d'abord résumer le flux.
Il existe un modèle User et un modèle Post.
** ① Affichez la page d'affichage (new.html.erb) avec la nouvelle action ** Lorsqu'une demande d'appeler la nouvelle action est effectuée, la nouvelle page de publication du message s'affiche en premier. ※image
** ② Passez l'instance @ post
créée par la nouvelle action à la vue **
post_controller.rb
class PostsController < ApplicationController
~~
def new
@post = Post.new #Généré ici@le post est nouveau.html.Passé à erb
end
~~
** ③ Entrez une valeur dans les propriétés de l'instance et soumettez **
** ④ Appelez l'action de création **
Comme vous pouvez le voir dans l'image ci-dessus, lorsque vous cliquez sur le bouton soumettre
(soumettre form_with), form_with appellera l'action de création.
- La méthode d'assistance form_with est un enfant pratique qui examine les propriétés de l'instance passée (
@ post
dans ce cas) et décide s'il faut ignorer la création ou la mise à jour.
form_avec c'est penser
- @le message est vide → Je le fais pour la première fois Alors créez!
- @le message n'est pas vide → je veux le changer! Alors mettez à jour!
** ⑤ Appelez la méthode post_params **
post_controller.rb
class PostsController < ApplicationController
~~
def create
#L'action de création est appelée et Post.create(post_params)Est exécuté → post_params est appelé
Post.create(post_params)
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
end
~~
** ⑥ Parmi les valeurs reçues par params, spécifiez la valeur reçue par permit (permit) **
État de la valeur reçue par les paramètres
[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"oLGgLMTcqSPi7cbK9j1wFhH5rqiwXYO7GyRoZcZFZe6Y5VdbHrWCOyeo37kgW/bsl+eANQrz7p/lAzZMnAS8Gg==",
"post"=>{"title"=>"Ce que j'ai appris aujourd'hui", "content"=>"form_avec est un enfant sage!"},
"commit"=>"Publier", "exept"=>:index, "controller"=>"posts", "action"=>"create"} permitted: false>
Comme il est difficile de le voir, la ligne saute à une position qui n'est pas initialement prévue, mais elle est généralement renvoyée sur une ligne.
" post "=> {" title "=>" Ce que j'ai appris aujourd'hui "," content "=>" form_with est un enfant sage! "},
Est la valeur gérée par post_params
.
Si vous n'autorisez pas les valeurs reçues par permit
, des valeurs involontaires peuvent être stockées dans la table, il est donc presque obligatoire de les spécifier.
** ⑦ Créer un message avec la valeur post_params (enregistré avec succès dans le tableau) ** La valeur retournée par la méthode post_params sera utilisée pour Post.create, donc Il est dans le même état que ci-dessous.
def create
Post.create(title: "Ce que j'ai appris aujourd'hui", content: "form_avec est un enfant sage!", user_id: 1)
redirect_to root_path
end
Après avoir confirmé ce flux, si vous regardez à nouveau l'image au début, vous approfondirez votre compréhension!
Les différences entre form_tag et form_for sont résumées dans cet article. Comment écrire form_with / form_for / form_tag dans [Rails] haml
Je vous serais reconnaissant si vous pouviez signaler des erreurs.
Recommended Posts