Rails 6.0.3.4
Ich bin während der Implementierung der Fehlerbehandlung der Kommentarfunktion gestolpert, daher werde ich sie hier aufzeichnen.
Ich erstelle eine Website zum Veröffentlichen von Rezepten, und wenn ich die Details des Rezepts eingebe, gibt es eine Kommentarfunktion und eine Kommentarliste. Der Name des Benutzers, der den Kommentar gepostet hat, ist ebenfalls enthalten. Kommentar Es wird davon ausgegangen, dass die Ansicht, in der der Kommentar zum Modellcontroller angezeigt wird, abgeschlossen ist. Beim Routing sind Kommentare im Rezept verschachtelt.
class Comment < ApplicationRecord
belongs_to :recipe
belongs_to :user
validates :contents, presence: true, length: { maximum: 100 }
end
Es sieht aus wie das. Inhalt ist der Spaltenname, der den Kommentarinhalt enthält. Die Validierung des Inhalts besteht darin, dass Sie nicht in das leere Feld posten können und dass es maximal 100 Zeichen umfasst.
class CommentsController < ApplicationController
def create
@recipe = Recipe.find(params[:recipe_id]) #Definieren Sie, welches Rezept zugeordnet ist
@comment = Comment.new(comment_params) #Erstellen Sie eine leere Instanz (vergessen Sie nicht die starken Parameter)
if @comment.save #Wenn Sie den Kommentar speichern können
redirect_to recipe_path(@comment.recipe.id) #Sie kehren zur Rezeptliste zurück. Lassen Sie uns dem Rückweg sagen, um welche Rezept-ID es sich handelt. Weil wir uns [email protected] mit ID
else #Wenn Sie es nicht speichern können (wenn es validiert ist)
@comments = @recipe.comments.includes(:user) #Für Kommentare zeigen Sie die Kommentare an (ich habe hier nicht geschrieben)
render 'recipes/show' #Kehren Sie zur Rezeptliste zurück
end
end
private
def comment_params
Abkürzung
end
end
Wenn es nicht gespeichert wird, stellen Sie es vorerst einfach mit Render wieder her! Ich habe nur Rendern geschrieben. Wenn ich dies tue, erhalte ich jedoch eine Fehlermeldung, aber ich erhalte die Fehlermeldung, dass die bisherigen Kommentare aus der Liste verschwinden.
Beim Rendern wird die Ansicht zunächst direkt angezeigt. Es geht nicht durch die Steuerung. Mit anderen Worten, es geht um das Rendern von Rezepten / Shows ohne die Definition von @comments. Was ist @comments in der Rezeptliste (Rezepte / Show-Ansicht) geschrieben? Es scheint, dass es war. Definieren wir also @comments, bevor wir mit render zur Ansicht zurückkehren.
Ich werde es für alle Fälle beiseite legen.
<div class="comment-box">
<% if @comments %>
<% @comments.each do |comment| %>← Hier@Bemerkungen
<p>
<strong><%= comment.user.nickname %>:</strong>
<%= comment.contents %>
</p>
<% end %>
<% end %>
</div>
Recommended Posts