Permiterea comentariilor despre Ruby pe șine

În iterarea anterioară, Adăugarea autentificării RESTful, autentificarea a fost adăugată pe blogul dvs., astfel încât numai utilizatorii autorizați să poată crea postări pe blog. Această iterație va adăuga caracteristica finală (și majoră) a tutorialului blogului: comentarii. După ce ai terminat acest tutorial, utilizatorii vor putea posta comentarii anonime pe postările de pe blog fără să te autentifici.

Crearea tabelelor bazei de date și controlerului de comentarii se realizează mult în același mod în care au fost create tabelele bazei de date postări și a controlerului - folosind generatorul de schele. Generatorul de schele va crea controlere RESTful, va ruta hărți și va crea migrații ale bazelor de date. Dar înainte de a continua acest lucru, trebuie să vă gândiți ce este un comentariu și care vor fi membrii datelor sale. Un comentariu are:

După ce ați decis care sunt membrii datelor unui comentariu, puteți rula generatorul de schele. Rețineți că câmpul post este de tipul „referințe”. Acesta este un tip special care va genera un câmp de identificare pentru a lega tabelul de comentarii cu tabelul de postări printr-o cheie străină.

instagram viewer

După ce sunt generate controlerele și migrațiile, puteți merge înainte și rula migrația executând sarcina db: migrate rake.

După ce tabelele bazei de date sunt puse în aplicare, puteți începe configurarea modelului. În model, lucruri precum validările de date - pentru a asigura câmpurile obligatorii sunt prezente - și relațiile pot fi definite. Se vor folosi două relații.

O postare pe blog are multe comentarii. Relația has_many nu necesită câmpuri speciale în tabelul postărilor, dar tabelul de comentarii are un post_id pentru a-l lega de tabelul postărilor. Din Șine, puteți spune lucruri de genul @ post.comments pentru a obține o listă de obiecte Comment care aparțin obiectului @post. Comentariile sunt și ele dependent pe obiectul lor Părinte părinte. Dacă obiectul Post este distrus, toate obiectele de comentarii ale copiilor ar trebui distruse și ele.

Un comentariu aparține unui obiect postat. Un comentariu poate fi asociat doar cu o singură postare pe blog. Relația apartine_to necesită doar un singur câmp post_id pentru a fi în tabelul de comentarii. Pentru a accesa obiectul de post al unui comentariu, puteți spune ceva de genul @ comment.post în Șine.

Următoarele sunt modelele de postare și comentariu. Mai multe validări au fost adăugate modelului de comentarii pentru a se asigura că utilizatorii completează câmpurile necesare. Rețineți, de asemenea, relațiile has_many și belong_to.

Controlerul de comentarii nu va fi utilizat în mod tradițional, este folosit un controler RESTful. În primul rând, va fi accesat exclusiv din vizualizările Post. Formularele de comentarii și afișarea sunt în întregime în acțiunea de afișare a controlerului Post. Deci, pentru a începe, ștergeți întregul app / views / comentarii director pentru a șterge toate vizualizările de comentarii. Nu vor fi necesare.

În continuare, trebuie să ștergeți unele acțiuni din controlerul Comentarii. Tot ce este nevoie este crea și distruge acțiuni. Toate celelalte acțiuni pot fi șterse. Deoarece controlerul de comentarii este acum doar un butuc fără vizualizări, trebuie să schimbați câteva locuri în controler unde încearcă să redirecționeze către controlerul Comentarii. Oriunde există un apel redirecționat, schimbați-l pe redirect_to (@ comment.post). Mai jos este controlorul complet de comentarii.

Una dintre piesele finale de pus în aplicare este formularul de comentarii, care este de fapt o sarcină destul de simplă. Practic, există două lucruri de făcut: crearea unui nou obiect de comentariu în acțiunea de afișare a controlorului postărilor și afișarea unui formular care se supune acțiunii de creare a controlorului Comentarii. Pentru a face acest lucru, modificați acțiunea de afișare din controlerul postărilor, astfel încât să arate după cum urmează. Linia adăugată este cu caractere aldine.

Ultimul pas este afișarea efectivă a comentarii. Trebuie să aveți grijă atunci când afișați datele de intrare ale utilizatorului, deoarece un utilizator ar putea încerca să insereze etichete HTML care ar putea perturba pagina. Pentru a preveni acest lucru, h se folosește metoda. Această metodă va scăpa de orice etichete HTML pe care utilizatorul încearcă să le introducă. Într-o altă iterație, un limbaj de marcare, cum ar fi RedCloth sau o metodă de filtrare, ar putea fi aplicat pentru a permite utilizatorilor să posteze anumite etichete HTML.

Comentariile vor fi afișate cu parțial, la fel cum au fost postările. Creați un fișier numit app / opinii / posturi / _comment.html.erb și așezați următorul text în el. Acesta va afișa comentariul și, dacă utilizatorul este conectat și poate șterge comentariul, va afișa și linkul Distruge pentru a distruge comentariul.

În sfârșit, pentru a afișa toate comentariile postării simultan, apelați comentariile parțial cu : collection => @ post.comments. Acest lucru va apela comentariile parțial pentru fiecare comentariu care aparține postării. Adăugați următoarea linie la vizualizarea de afișare din controlerul posturilor

În iterația tutorialului următor, simplul_format va fi înlocuit cu un motor de formatare mai complex numit RedCloth. RedCloth permite utilizatorilor să creeze conținut cu marcare ușoară, cum ar fi * bold * pentru bold și _italic_ pentru cursiva. Acest lucru va fi disponibil atât pentru postere blog, cât și pentru comentatori.