[RUBY] Je souhaite ajouter une fonction de suppression à la fonction de commentaire

【Aperçu】

1. Conclusion </ b>

2. Comment l'avez-vous mis en œuvre? </ B>

3. Ce que je veux faire à l'avenir </ b>

  1. Conclusion

❶ Rendez possible de lier l'identifiant publié à l'action de destruction du contrôleur de commentaire et supprimez-le.

❷ Autorisez le bouton de suppression à être pressé avec link_to sur le chemin imbriqué.


2. Comment l'avez-vous mis en œuvre?

<Environnement de développement>
Ruby: 2.6.5
Rails: 6.0.3.3

controllers/comments_controller.rb


  def destroy
    redirect_to root_path unless user_signed_in? || current_user.id == @time.user_id && current_user.id == comment.user_id #---(1)
    @comment = Comment.find(params[:time_id])
    if @comment.destroy  #---(2)
      redirect_to time_path #---(3)
    else
      redirect_to root_path #---(4)
    end
  end

❶ L'identifiant publié peut être lié à l'action de destruction du contrôleur de commentaire et supprimé. Cela empêche les personnes déconnectées et les affiches autres que vous de supprimer les commentaires sur leurs publications (en saisissant directement l'URL pour les supprimer) dans (1). (2) supprime le commentaire que vous avez publié. Si (3) réussit, vous serez renvoyé à l'écran de publication de commentaires. (4) reviendra à la première page si la suppression du commentaire échoue.

ruby:view/time/show.html.erb


      <% if @comments %>#---(1)
        <% @comments.each do |comment| %>#---(2)
          <p>
           <%= comment.user.name %>:#---(3)
            <% if user_signed_in? && current_user.id == @time_report.user_id && current_user.id == comment.user_id %>
              <%= link_to '❌', time_report_comment_path(comment.id), method: :delete %> #---(4)
               <%= comment.content %> #---(5)
            <% end %>
           </p>
        <% end %>
      <% end %>

❷ Le bouton de suppression peut être pressé avec link_to sur le chemin imbriqué. (1) est "s'il y a un commentaire", donc c'est une variable d'instance et est importée du contrôleur de temps. (2) Les commentaires de l'utilisateur ➡︎ sont has_many, donc j'apporte beaucoup de commentaires. (3) Parmi eux, seul le nom d'utilisateur lié du commentaire est affiché. (4) Puisque les commentaires sont imbriqués par routage, vous pouvez supprimer vos propres commentaires postés par vous-même. </ b> (5) Le contenu du commentaire s'affiche.


  1. Ce que je veux faire à l'avenir

Je veux implémenter SPA. Lorsque je clique sur la marque de bulle, le commentaire est affiché de manière asynchrone (sans transition de page), et je souhaite créer l'application pour pouvoir la modifier ou la supprimer. Pour cela, la connaissance de Nuxt.js / Vue.js est requise, je vais donc l'étudier régulièrement.

Recommended Posts