[RUBY] [Rails] Fonction de commentaire (enregistrement / affichage / suppression)

Un mémorandum de mise en œuvre de la fonction de commentaire pour les messages.

objectif

la mise en oeuvre

Création de modèles de commentaires et de tables

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

Section de commentaire configurée sur la page de détail

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

Définition de l'action sur le contrôleur

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

[Rails] Fonction de commentaire (enregistrement / affichage / suppression)
[Rails] Implémentez la fonction d'enregistrement / suppression de carte de crédit dans PAY.JP
[Ruby on Rails] Implémentation de la fonction de commentaire
[Rails] Commentaire mémo de procédure d'implémentation
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Rails [Pour les débutants] Implémentation de la fonction de commentaire
[Ruby on Rails] Suppression logique (fonction de retrait)
Les rails suivent la fonction
Fonction de commentaire implémentée
[Rails] Fonction de notification
Implémentation de la fonction de commentaire (Ajax)
[Ruby on Rails] Fonction de classement des scores (affichage complet)
[rails] fonction de classement des balises
Implémentation de la fonction Rails CRUD ① (nouvel ajout, suppression cette fois)
[Ruby on Rails] Fonction de signet (enregistrement favori, comme): une direction
[Rails] Implémenter la fonction de fin d'événement (suppression logique) en utilisant la paranoïa (gem)
Implémenter la fonction d'enregistrement des utilisateurs et la fonction d'enregistrement de l'entreprise séparément dans Rails concevoir
Implémenter la fonction d'application dans Rails
Implémentation de la fonction de recherche floue Rails
[Rails] Implémenter la fonction de recherche d'utilisateurs
Fonction de recherche à l'aide de [rails] ransack
[Rails] Implémentation de la fonction de catégorie
Rails ~ Comprendre la fonction de message ~
[Rails] Fonction de panier de site EC
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémenter la fonction de publication d'images
[Rails] Implémentation d'une fonction similaire
Fonction de commentaire de création d'application asynchrone
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)