Tillåter kommentarer om Ruby on Rails

I föregående iteration, Lägga till RESTful Autentisering, har autentisering lagts till din blogg så att endast godkända användare kunde skapa blogginlägg. Denna iteration kommer att lägga till den sista (och större) funktionen i bloggstudien: kommentarer. När du är klar med den här tutorialen kan användare lägga upp anonyma kommentarer på blogginlägg utan att logga in.

Skapa kommentarer databas tabeller och controller görs mycket på samma sätt som inlägg databas tabeller och controller skapades - med hjälp av ställningen generator. Byggnadsställningsgeneratorn skapar RESTful controllers, kartvägar och skapar databasmigreringar. Men innan du tar upp detta måste du tänka på vad en kommentar är och vad dess datamedlemmar kommer att vara. En kommentar har:

När du har bestämt vad en kommentars datamedlemmar är kan du köra ställningsgeneratorn. Observera att inläggsfältet är av typen "referenser". Detta är en speciell typ som genererar ett ID-fält för att länka kommentartabellen till inläggstabellen via en utländsk nyckel.

instagram viewer

När kontroller och migrering har genererats kan du gå vidare och driva migreringen genom att köra uppgiften db: migrera.

När databastabellerna är på plats kan du börja installera modellen. I modellen är saker som datavalidering - för att säkerställa att obligatoriska fält finns - och relationer kan definieras. Två relationer kommer att användas.

Ett blogginlägg har många kommentarer. Förhållandet has_many kräver inga specialfält i inläggstabellen, men kommentarstabellen har en post_id för att länka den till inläggstabellen. Från rails, kan du säga saker som @ post.comments för att få en lista med kommentarobjekt som tillhör @postobjektet. Kommentarer är också beroende på deras förälder Post objekt. Om Post-objektet förstörs, bör alla kommentarer för barn också förstöras.

En kommentar tillhör ett postobjekt. En kommentar kan bara kopplas till ett enda blogginlägg. Relations_to-förhållandet kräver bara ett enda post_id-fält i kommentartabellen. För att få åtkomst till en kommentars förälderpostobjekt kan du säga något liknande @ comment.post i Rails.

Följande är Post- och kommentarmodeller. Flera valideringar har lagts till i kommentarmodellen för att säkerställa att användare fyller i de obligatoriska fälten. Observera också has_many och tillhör_till relationer.

Kommentarstyrenheten kommer inte att användas på det traditionella sättet som en RESTful controller använder. För det första kommer det endast att komma åt det från inläggets åsikter. Kommentarformuläret och displayen är helt och hållet i Post-kontrollens show-handling. Så till att börja med, ta bort hela app / visningar / kommentarer katalog för att radera alla kommentarvyer. De kommer inte att behövas.

Därefter måste du ta bort några av åtgärderna från kommentarstyrenheten. Allt som behövs är skapa och förstöra handlingar. Alla andra åtgärder kan raderas. Eftersom Kommentarkontrollern nu bara är ett stubb utan visningar, måste du byta några platser i styrenheten där den försöker omdirigera till Kommentarkontrollern. Ändra var det finns en omdirigering_ till samtal, ändra det till redirect_to (@ comment.post). Nedan finns den kompletta kommentarstyrenheten.

En av de sista delarna som ska införas är kommentarformuläret, som faktiskt är en ganska enkel uppgift. Det finns i grund och botten två saker att göra: skapa ett nytt kommentarobjekt i visningsåtgärden för inläggskontrollern och visa ett formulär som skickas till skapandeåtgärden för kommentarstyrenheten. För att göra det, ändra show-åtgärden i postkontrollen så att den ser ut som följer. Den tillagda raden är i fetstil.

Det sista steget är att faktiskt visa kommentarer. Man måste vara försiktig när man visar användarinmatningsdata eftersom en användare kan försöka infoga HTML-taggar som kan störa sidan. För att förhindra detta, h metod används. Denna metod kommer undan alla HTML-taggar som användaren försöker mata in. I en ytterligare iteration kan ett markeringsspråk som RedCloth eller en filtreringsmetod användas för att låta användare posta vissa HTML-taggar.

Kommentarer kommer att visas med en delvis, precis som inlägg var. Skapa en fil som heter app / visningar / inlägg / _comment.html.erb och placera följande text i den. Den kommer att visa kommentaren och om användaren är inloggad och kan ta bort kommentaren, visas även länken Destroy för att förstöra kommentaren.

Slutligen, för att visa alla inläggets kommentarer samtidigt, ring kommentarerna delvis med : collection => @ post.comments. Detta kommer att ringa kommentarerna delvis för varje kommentar som tillhör inlägget. Lägg till följande rad i showvyn i postkontrollern.

I nästa tutorial-iteration kommer simple_format att ersättas med en mer komplex formateringsmotor som heter RedCloth. RedCloth tillåter användare att skapa innehåll med enkel markering som * fet * för fetstil och _italic_ för kursiv. Detta kommer att vara tillgängligt för både blogginlägg och kommentarer.