Un mémorandum de mise en œuvre de la fonction de commentaire pour les messages.
--Créer un modèle de commentaire et une table (contenu du commentaire, contributeur de commentaire)
Terminal
% rails g model Comment comment_text:text user:references post:references
% rails g controller Comments
% rails db:migrate
Association ajoutée au modèle.
Modèle de commentaire
belongs_to :post # Comment.Obtenir les messages commentés sur le message
belongs_to :user # Comment.Obtenir un contributeur de commentaires avec l'utilisateur
Modèle utilisateur
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy # User.Obtenez les commentaires des utilisateurs avec des commentaires
validates :comment_text, presence: true, length: { maximum: 1000 } #Validez le ciel, limitez le nombre de caractères, etc. ..
Modèle de poste
belongs_to :user
has_many :comments, dependent: :destroy # Post.Obtenez des commentaires pour ce message avec des commentaires
Page de détails
-#Affichage des commentaires
= @comments.each do |c|
= c.user.name
- if c.user.id == @post.user.id #Contributeur d'article
%p Publié par
= simple_format(c.comment_text) #Affichage avec sauts de ligne
= link_to 'Effacer', post_comment_path(@post, c), data: {confirm: '本当にEffacerしますか?'}, method: :delete
-#Pour supprimer un commentaire,@post (parent), @Doit être passé à c dans les commentaires
-#Poste un commentaire
= form_for [@post, @comment], local: true do |f| #Puisque le commentaire est lié à l'article, écrivez-le sous forme de tableau
= f.text_area :comment_test
= f.submit "Publier"
Définissez le routage pour qu'il soit lié à la page d'affichage de la liste.
routes.rb
resources :posts do #Nest pour créer un lien vers des messages
resources :comments, only: [:create, :destroy]
end
Action d'enregistrement / suppression de commentaire (créer / détruire).
Terminal
% rails g controller comments
contrôleur de commentaires
before_action :set_post
before_action :authenticate_user! #Autorisé uniquement lorsque vous êtes connecté
def create
@comment = @post.comments.create(comment_params)
if @comment.save
redirect_to blog_path(@post) notice: 'Commenté'
else
flash.now[:alert] = 'Le commentaire a échoué'
render post_path(@post)
end
end
def destroy
@comment = Comment.find(params[:id])
if @comment.destroy
redirect_to post_path(@post), notice: 'Commentaire supprimé'
else
flash.now[:alert] = 'Échec de la suppression du commentaire'
render post_path(@post)
end
end
private
def set_post
@post = Post.find(params[:post_id])
end
def comment_params
params.required(:comment).permit(:comment_text).merge(user_id: current_user.id, post_id: params[:post_id])
end
Puisque la liste des commentaires est également affichée sur la page de publication (show), les données de commentaire peuvent être obtenues avec posts # show.
contrôleur de postes
:
def show
@post = Post.find(params[:id])
@comment = Comment.new #Créer une instance pour un formulaire(Pour ajouter des commentaires)
@comments = @post.comments #Pour l'affichage de la liste des commentaires
end
:
Recommended Posts