Zulassen von Kommentaren zu Ruby on Rails

click fraud protection

In der vorherigen Iteration, Hinzufügen einer RESTful-Authentifizierung, wurde Ihrem Blog eine Authentifizierung hinzugefügt, sodass nur autorisierte Benutzer Blog-Beiträge erstellen konnten. Diese Iteration fügt die letzte (und wichtigste) Funktion des Blog-Tutorials hinzu: Kommentare. Nachdem Sie mit diesem Tutorial fertig sind, können Benutzer anonyme Kommentare zu Blog-Posts veröffentlichen, ohne sich anzumelden.

Das Erstellen der Kommentardatenbanktabellen und des Controllers erfolgt auf die gleiche Weise wie die Post-Datenbanktabellen und der Controller - mithilfe des Gerüstgenerators. Der Gerüstgenerator erstellt RESTful-Controller, ordnet Routen zu und erstellt Datenbankmigrationen. Bevor Sie dies jedoch übernehmen, müssen Sie sich überlegen, was ein Kommentar ist und welche Datenelemente er enthält. Ein Kommentar hat:

Sobald Sie die Datenelemente eines Kommentars festgelegt haben, können Sie den Gerüstgenerator ausführen. Beachten Sie, dass das Post-Feld vom Typ "Referenzen" ist. Dies ist ein spezieller Typ, der ein ID-Feld generiert, um die Kommentartabelle über einen Fremdschlüssel mit der Beitragstabelle zu verknüpfen.

instagram viewer

Sobald die Controller und Migrationen generiert wurden, können Sie die Migration ausführen, indem Sie die Rake-Task db: migrate ausführen.

Sobald die Datenbanktabellen vorhanden sind, können Sie mit dem Einrichten des Modells beginnen. Im Modell können beispielsweise Datenvalidierungen - um sicherzustellen, dass die erforderlichen Felder vorhanden sind - und Beziehungen definiert werden. Es werden zwei Beziehungen verwendet.

Ein Blog-Beitrag hat viele Kommentare. Die Beziehung has_many erfordert keine speziellen Felder in der Posts-Tabelle, aber die Kommentartabelle verfügt über eine post_id, um sie mit der Posts-Tabelle zu verknüpfen. Von Schienenkann man Dinge sagen wie @Kommentar schreiben um eine Liste der Kommentarobjekte abzurufen, die zum @ post-Objekt gehören. Kommentare sind auch abhängig auf ihrem übergeordneten Post-Objekt. Wenn das Post-Objekt zerstört wird, sollten auch alle untergeordneten Kommentarobjekte zerstört werden.

Ein Kommentar gehört zu einem Post-Objekt. Ein Kommentar kann nur einem einzelnen Blog-Beitrag zugeordnet werden. Für die Beziehung "zu" gehört nur ein einzelnes Feld "post_id" in der Kommentartabelle. Um auf das übergeordnete Post-Objekt eines Kommentars zuzugreifen, können Sie so etwas wie sagen @ comment.post in Schienen.

Im Folgenden sind die Post- und Kommentarmodelle aufgeführt. Dem Kommentarmodell wurden mehrere Validierungen hinzugefügt, um sicherzustellen, dass Benutzer die erforderlichen Felder ausfüllen. Beachten Sie auch die Beziehungen has_many und Zugehörigkeit zu.

Der Kommentar-Controller wird nicht auf die herkömmliche Weise verwendet, wie ein RESTful-Controller verwendet wird. Erstens wird ausschließlich über die Post-Ansichten darauf zugegriffen. Die Kommentarformulare und die Anzeige befinden sich vollständig in der Show-Aktion des Post-Controllers. Löschen Sie also zunächst das gesamte App / Ansichten / Kommentare Verzeichnis, um alle Kommentaransichten zu löschen. Sie werden nicht benötigt.

Als Nächstes müssen Sie einige der Aktionen aus dem Kommentar-Controller löschen. Alles was benötigt wird ist das erstellen und zerstören Aktionen. Alle anderen Aktionen können gelöscht werden. Da der Kommentar-Controller nur noch ein Stub ohne Ansichten ist, müssen Sie einige Stellen im Controller ändern, an denen versucht wird, zum Kommentar-Controller umzuleiten. Wenn ein redirect_to-Aufruf vorhanden ist, ändern Sie ihn in redirect_to (@ comment.post). Unten finden Sie den vollständigen Kommentar-Controller.

Eines der letzten Elemente ist das Kommentarformular, das eigentlich eine recht einfache Aufgabe ist. Grundsätzlich gibt es zwei Möglichkeiten: Erstellen Sie ein neues Kommentarobjekt in der Show-Aktion des Posts-Controllers und zeigen Sie ein Formular an, das an die Erstellungsaktion des Comments-Controllers gesendet wird. Ändern Sie dazu die Show-Aktion im Posts-Controller wie folgt. Die hinzugefügte Zeile ist fett gedruckt.

Der letzte Schritt ist die tatsächliche Anzeige der Bemerkungen. Bei der Anzeige von Benutzereingabedaten ist Vorsicht geboten, da ein Benutzer möglicherweise versucht, HTML-Tags einzufügen, die die Seite stören könnten. Um dies zu verhindern, wird die h Methode wird verwendet. Diese Methode entgeht allen HTML-Tags, die der Benutzer einzugeben versucht. In einer weiteren Iteration könnte eine Auszeichnungssprache wie RedCloth oder eine Filtermethode angewendet werden, damit Benutzer bestimmte HTML-Tags veröffentlichen können.

Kommentare werden mit einem Teil angezeigt, genau wie Beiträge. Erstellen Sie eine Datei mit dem Namen app / views / posts / _comment.html.erb und platzieren Sie den folgenden Text darin. Der Kommentar wird angezeigt. Wenn der Benutzer angemeldet ist und den Kommentar löschen kann, wird auch der Link Zerstören angezeigt, um den Kommentar zu zerstören.

Um schließlich alle Kommentare eines Beitrags gleichzeitig anzuzeigen, rufen Sie die Kommentare teilweise mit auf : collection => @ post.comments. Dadurch werden die Kommentare für jeden Kommentar, der zum Beitrag gehört, teilweise aufgerufen. Fügen Sie der Show-Ansicht im Posts-Controller die folgende Zeile hinzu.

In der nächsten Tutorial-Iteration wird simple_format durch eine komplexere Formatierungs-Engine namens RedCloth ersetzt. Mit RedCloth können Benutzer Inhalte mit einfachem Markup erstellen, z. B. * fett * für fett und _italic_ für kursiv. Dies steht sowohl Blog-Postern als auch Kommentatoren zur Verfügung.

instagram story viewer