Разрешаване на коментари за Ruby on Rails

В предишната итерация, Добавяне на RESTful Authentication, автентификацията беше добавена към вашия блог, така че само оторизирани потребители да могат да създават публикации в блога. Тази итерация ще добави финалната (и главната) функция на учебника за блога: коментари. След като приключите с този урок, потребителите ще могат да публикуват анонимни коментари в публикации в блога, без да влизат.

Създаването на таблици и контролер на базата данни за коментари се извършва много по същия начин, по който са създадени таблиците на базата данни и контролерът - с помощта на генератора на скелета. Генераторът на скелета ще създаде RESTful контролери, ще картографира маршрутите и ще създаде миграции на база данни. Но преди да се заемете с това, трябва да помислите какво е коментар и какви ще са членовете на данните му. Коментар има:

След като решите какви са членовете на данните на коментара, можете да стартирате генератора на скелето. Обърнете внимание, че полето за публикации е от типа „препратки“. Това е специален тип, който ще генерира поле за идентификация, за да свърже таблицата с коментари с таблицата на публикациите чрез чужд ключ.

instagram viewer

След като контролерите и миграциите са генерирани, можете да продължите напред и да стартирате миграцията, като изпълните задачата db: migrate rake.

След като таблиците на базата данни са на мястото си, можете да започнете да настройвате модела. В модела неща като валидиране на данни - за да се гарантира, че задължителните полета присъстват - и отношенията могат да бъдат определени. Ще се използват две отношения.

Публикацията в блога има много коментари. Връзката has_many не изисква специални полета в таблицата с публикации, но таблицата с коментари има post_id, за да го свърже с таблицата с публикации. от Rails, можете да кажете неща като @ post.comments за да получите списък с обекти за коментар, които принадлежат на обекта @post. Коментарите също са зависим на техния родителски обект Post. Ако обектът „Публикуване“ е унищожен, всички обекти на коментари за деца също трябва да бъдат унищожени.

Коментар принадлежи към обект на публикация. Коментар може да бъде свързан само с една публикация в блога. Връзката last_to изисква само едно поле post_id, за да бъде в таблицата с коментари. За достъп до обекта на родителския пост на коментар можете да кажете нещо подобно @ comment.post в Релси.

Следват моделите за публикуване и коментар. В модела за коментар са добавени няколко валидации, за да се гарантира, че потребителите попълват необходимите полета. Обърнете внимание също на връзките has_many и pripada_to.

Контролерът за коментари няма да се използва по традиционния начин, като се използва RESTful контролер. Първо, достъпът до него ще бъде единствено от мненията на публикациите. Формите за коментари и показването са изцяло в действието за показване на контролера Post. Така че, за начало изтрийте цялото ап / възгледи / коментар директория, за да изтриете всички изгледи на коментари. Те няма да са необходими.

След това трябва да изтриете някои от действията от контролера за коментари. Всичко, което е необходимо, е създавам и унищожи действия. Всички останали действия могат да бъдат изтрити. Тъй като контролерът Коментари вече е само мъниче без изгледи, трябва да промените няколко места в контролера, където той се опитва да пренасочи към контролера Коментари. Където и да има пренасочване_обаждане, променете го на redirect_to (@ comment.post). По-долу е пълен контролер за коментари.

Едно от финалните парчета, което трябва да се постави, е формата за коментари, което всъщност е доста проста задача. По същество трябва да направите две неща: да създадете нов обект Коментар в действието на показване на контролера на публикации и да покажете форма, която се подчинява на действието за създаване на контролера Коментари. За целта променете показването на действие в контролера на публикации, за да изглежда така. Добавеният ред е удебелен.

Последната стъпка е действително показване на коментари. Трябва да се внимава при показване на потребителски входни данни, тъй като потребителят може да се опита да вмъкне HTML тагове, което може да наруши страницата. За да предотвратите това, з метод се използва. Този метод ще избегне всички HTML тагове, които потребителят се опитва да въведе. В следваща итерация може да се приложи език за маркиране като RedCloth или метод за филтриране, за да може потребителите да публикуват определени HTML тагове.

Коментарите ще се показват частично, точно както бяха публикациите. Създайте наречен файл ап / възгледи / мнения / _comment.html.erb и поставете следния текст в него. Той ще покаже коментара и, ако потребителят е влязъл в системата и може да изтрие коментара, ще покаже и връзката Destroy, за да унищожи коментара.

И накрая, за да покажете всички коментари на публикацията наведнъж, обадете се на частичните коментари : collection => @ post.comments. Това ще нарече коментарите частични за всеки коментар, който принадлежи към публикацията. Добавете следния ред към изгледа за показване в контролера за публикации.

В следващата итерация на урока simple_format ще бъде заменен с по-сложен двигател за форматиране, наречен RedCloth. RedCloth позволява на потребителите да създават съдържание с лесно маркиране, като * bold * за bold и _italic_ за курсив. Това ще бъде достъпно както за плакатите на блога, така и за коментаторите.

instagram story viewer