Rails 6.0.3.4
J'ai trébuché lors de la mise en œuvre de la gestion des erreurs de la fonction de commentaire, je vais donc l'enregistrer ici.
Je crée un site de publication de recettes, et lorsque j'entre les détails de la recette, il y a une fonction de commentaire et une liste de commentaires. Le nom de l'utilisateur qui a publié le commentaire est également inclus. Commentaire Il est supposé que la vue qui affiche le commentaire du contrôleur de modèle est terminée. Dans le routage, les commentaires sont imbriqués dans la recette.
class Comment < ApplicationRecord
belongs_to :recipe
belongs_to :user
validates :contents, presence: true, length: { maximum: 100 }
end
Ça ressemble à ça. contents est le nom de la colonne qui contient le contenu du commentaire. La validation du contenu est que vous ne pouvez pas publier dans le vide et qu'il est de 100 caractères ou moins.
class CommentsController < ApplicationController
def create
@recipe = Recipe.find(params[:recipe_id]) #Définir quelle recette est associée
@comment = Comment.new(comment_params) #Créez une instance vide (n'oubliez pas les paramètres forts)
if @comment.save #Si vous pouvez enregistrer le commentaire
redirect_to recipe_path(@comment.recipe.id) #Vous serez renvoyé à la liste des recettes. Disons au chemin de retour de quel identifiant de recette il s'agit. Je m'associe, [email protected] avec identifiant
else #Si vous ne pouvez pas le sauvegarder (quand il est validé)
@comments = @recipe.comments.includes(:user) #Pour les commentaires, affichez les commentaires jusqu'à présent (je n'ai pas écrit ici)
render 'recipes/show' #Revenir à la liste des recettes
end
end
private
def comment_params
Abréviation
end
end
Pour le moment, s'il n'est pas sauvegardé, restaurez-le simplement avec render! Je n'ai écrit que le rendu. Cependant, lorsque je le fais, j'obtiens un message d'erreur, mais j'obtiens une erreur indiquant que les commentaires jusqu'à présent disparaissent de la liste.
render consiste à afficher la vue directement en premier lieu. Il ne passe pas par le contrôleur. En d'autres termes, il va rendre "recettes / show" sans la définition de @comments. Qu'est-ce que @comments est écrit dans la liste des recettes (recettes / vue spectacle)? Il semble que c'était le cas. Définissons donc @comments avant de revenir à la vue avec rendu.
Je vais le mettre de côté au cas où.
<div class="comment-box">
<% if @comments %>
<% @comments.each do |comment| %>← Ici@commentaires
<p>
<strong><%= comment.user.nickname %>:</strong>
<%= comment.contents %>
</p>
<% end %>
<% end %>
</div>
Recommended Posts