[RUBY] Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen

【Überblick】

1. Schlussfolgerung </ b>

2. Wie haben Sie es implementiert? </ B>

3. Was ich in Zukunft tun möchte </ b>

  1. Fazit

❶ Ermöglichen Sie es, die veröffentlichte ID mit der Zerstörungsaktion des Kommentar-Controllers zu verknüpfen und zu löschen.

❷ Lassen Sie die Löschtaste mit link_to auf dem verschachtelten Pfad drücken.


2. Wie haben Sie es umgesetzt?

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

❶ Die gepostete ID kann mit der Zerstörungsaktion des Kommentar-Controllers verknüpft und gelöscht werden. Dies soll verhindern, dass abgemeldete Personen und andere Poster als Sie Kommentare zu ihren Posts löschen (indem Sie direkt die URL eingeben, um sie zu löschen) in (1). (2) löscht den von Ihnen geposteten Kommentar. Wenn (3) erfolgreich ist, kehren Sie zum Kommentarbildschirm zurück. (4) kehrt zur obersten Seite zurück, wenn das Löschen des Kommentars fehlschlägt.

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

❷ Die Löschtaste kann mit link_to auf dem verschachtelten Pfad gedrückt werden. (1) ist "wenn es einen Kommentar gibt", also ist es eine Instanzvariable und wird von der Zeitsteuerung gebracht. (2) Benutzer ➡︎ Kommentare sind has_many, daher bringe ich viele Kommentare. (3) Darunter wird nur der verknüpfte Benutzername des Kommentars angezeigt. (4) Da die Kommentare durch Routing verschachtelt sind, können Sie Ihre eigenen Kommentare löschen, die Sie selbst gepostet haben. </ b> (5) Der Inhalt des Kommentars wird angezeigt.


  1. Was ich in Zukunft machen möchte

Ich möchte SPA implementieren. Wenn ich auf die Sprechblasenmarkierung klicke, wird der Kommentar asynchron (ohne Seitenübergang) angezeigt, und ich möchte die Anwendung so gestalten, dass ich sie bearbeiten oder löschen kann. Dafür sind Kenntnisse in Nuxt.js / Vue.js erforderlich, daher werde ich es stetig studieren.

Recommended Posts