Tilladelse af kommentarer til Ruby on Rails

I den forrige iteration, Tilføjelse af RESTful Authentication, blev autentificering føjet til din blog, så kun autoriserede brugere kunne oprette blogindlæg. Denne iteration tilføjer den endelige (og større) funktion i blogtutorial: kommentarer. Når du er færdig med denne tutorial, vil brugerne kunne sende anonyme kommentarer til blogindlæg uden at logge ind.

Oprettelse af kommentardatabasetabeller og -controller udføres meget på samme måde som indlægsdatabasetabellerne og -controlleren blev oprettet - ved hjælp af stilladsgeneratoren. Stilladsgeneratoren opretter RESTful controllere, kortruter og skaber databasemigrationer. Men inden du tager dette videre, skal du tænke over, hvad en kommentar er, og hvad dens datamedlemmer bliver. En kommentar har:

Når du har besluttet, hvad en kommentares datamedlemmer er, kan du køre stilladsgeneratoren. Bemærk, at indlægsfeltet er af typen "referencer." Dette er en speciel type, der genererer et ID-felt til at forbinde kommentarstabellen med indlægstabellen via en fremmed nøgle.

instagram viewer

Når controllere og migrationer er genereret, kan du gå videre og køre migreringen ved at køre db: migrere rake-opgaven.

Når databasetabellerne er på plads, kan du begynde at indstille modellen. I modellen er ting som datavalidering - for at sikre, at de krævede felter er til stede - og relationer kan defineres. To relationer vil blive brugt.

Et blogindlæg har mange kommentarer. Forholdet has_many kræver ingen specielle felter i indlægstabellen, men kommentarstabellen har et post_id for at linke det til indlægstabellen. Fra Rails, kan du sige ting som @ post.comments for at få en liste med Kommentarobjekter, der hører til @postobjektet. Kommentarer er også afhængig på deres forældre Post-objekt. Hvis Post-objektet ødelægges, skal alle kommentarer til børn kommenteres også.

En kommentar hører til et postobjekt. En kommentar kan kun tilknyttes et enkelt blogindlæg. Relations_to-forholdet kræver kun, at et enkelt post_id-felt er i kommentaretabellen. For at få adgang til en kommentares forældreindlægsobjekt kan du sige noget lignende @ comment.post i skinner.

Følgende er post- og kommentarmodellerne. Der er tilføjet flere valideringer til kommentarmodellen for at sikre, at brugere udfylder de krævede felter. Bemærk også has_many og tilhører_til forhold.

Kommentarcontrolleren bruges ikke på den traditionelle måde, som en RESTful-controller bruges. For det første fås adgang til det udelukkende fra indlægssynspunkter. Kommentarformularerne og displayet er helt og holdent i Post-controllerens showhandling. Så til at begynde med skal du slette hele APP / views / kommentarer bibliotek for at slette alle kommentarvisninger. De er ikke nødvendige.

Dernæst skal du slette nogle af handlingerne fra Kommentar-controller. Alt hvad der er nødvendigt er skab og ødelægge handlinger. Alle andre handlinger kan slettes. Da Kommentar-controller nu kun er en stub uden visninger, skal du ændre et par steder i controlleren, hvor den forsøger at omdirigere til Kommentar-controlleren. Uanset hvor der er en omdirigering_til opkald, skal du ændre den til redirect_to (@ comment.post). Nedenfor er den komplette kommentarcontroller.

En af de sidste brikker, der skal bringes på plads, er kommentarformularen, som faktisk er en temmelig enkel opgave. Der er dybest set to ting at gøre: Opret et nyt Kommentarobjekt i visningshandlingen for indlægscontrolleren og vis en formular, der sender til oprettelseshandlingen for Kommentar-controller. For at gøre dette, skal du ændre showhandlingen i postens controller for at se ud som følgende. Den tilføjede linje er med fed skrift.

Det sidste trin er faktisk at vise kommentarer. Der skal udvises omhu, når du viser brugerinputdata, da en bruger muligvis forsøger at indsætte HTML-tags, der kan forstyrre siden. For at forhindre dette h metoden anvendes. Denne metode slipper for alle HTML-tags, som brugeren prøver at indtaste. I en yderligere iteration kunne et markup-sprog som RedCloth eller en filtreringsmetode anvendes, så brugerne kan sende visse HTML-tags.

Kommentarer vises med en delvis, ligesom indlæg var. Opret en fil kaldet app / synspunkter / indlæg / _comment.html.erb og placer følgende tekst i den. Det vil vise kommentaren, og hvis brugeren er logget ind og kan slette kommentaren, vises også linket Destroy for at ødelægge kommentaren.

Endelig skal du kalde kommentarerne delvis for at få vist alle kommentarer til et indlæg på én gang : samling => @ post.comments. Dette kalder kommentarerne delvis for hver kommentar, der hører til indlægget. Føj følgende linje til visningsvisningen i posts controller.

I den næste tutorial-iteration erstattes simple_format med en mere kompleks formateringsmotor kaldet RedCloth. RedCloth giver brugerne mulighed for at oprette indhold med let markering såsom * fed * for fed og _italic_ for kursiv. Dette vil være tilgængeligt for både blogplakater og kommentarer.

instagram story viewer