V predchádzajúcej iterácii Pridaním RESTful autentifikácie bola do vášho blogu pridaná autentifikácia, takže iba oprávnení používatelia mohli vytvárať príspevky do blogu. Táto iterácia pridá poslednú (a hlavnú) funkciu blogového tutoriálu: komentáre. Po dokončení tohto návodu budú používatelia môcť uverejňovať anonymné komentáre k blogovým príspevkom bez prihlásenia.
Vytváranie databázových tabuliek komentárov a radiča sa vykonáva veľmi rovnakým spôsobom, ako boli vytvorené tabuľky databázových tabuliek a radič - pomocou generátora lešenia. Generátor lešenia vytvorí RESTful radiče, mapuje trasy a vytvára migrácie databázy. Predtým, ako sa k tomu pridáte, musíte premýšľať o tom, čo je to komentár a aké budú jeho údaje. Komentár má:
Akonáhle ste sa rozhodli, čo sú členovia dát komentára, môžete spustiť generátor lešenia. Nezabudnite, že poštové pole je typu „referencie“. Toto je špeciálny typ, ktorý vygeneruje pole ID na prepojenie tabuľky komentárov s tabuľkou príspevkov prostredníctvom cudzieho kľúča.
Po vygenerovaní radičov a migrácií môžete pokračovať a spustiť migráciu spustením úlohy db: migrate rake.
Po vytvorení databázových tabuliek môžete začať s nastavením modelu. V modeli je možné definovať vzťahy, ako napríklad overenie údajov - aby sa zabezpečilo, že sú k dispozícii požadované polia -. Použijú sa dva vzťahy.
Príspevok v blogu obsahuje veľa komentárov. Vzťah has_many nevyžaduje žiadne špeciálne polia v tabuľke príspevkov, ale tabuľka komentárov obsahuje post_id na jej prepojenie s tabuľkou príspevkov. z Rails, môžete povedať veci ako @ post.comments získať zoznam objektov Comment, ktoré patria k objektu @post. Komentáre sú tiež závislý na ich rodičovskom objekte Post. Ak je objekt Post zničený, mali by sa zničiť aj všetky podradené objekty komentárov.
Komentár patrí k poštovému objektu. Komentár môže byť priradený iba k jednému blogovému príspevku. Vzťah patr_to vyžaduje, aby bolo v tabuľke poznámok iba jedno pole post_id. Ak chcete získať prístup k objektu rodičovského príspevku komentára, môžete povedať niečo podobné @ comment.post v Rails.
Nasledujú modely Post a Comment. Do modelu komentárov bolo pridaných niekoľko validácií, aby sa zabezpečilo, že používatelia vyplnia požadované polia. Všimnite si tiež vzťahy has_many a patří_to.
Ovládač komentárov sa nebude používať tradičným spôsobom, ako sa používa ovládač RESTful. Po prvé, bude prístupný iba z pohľadov príspevkov. Formuláre komentárov a zobrazenie sú úplne v akcii prehliadača Post. Ak chcete začať, odstráňte celý app / views / komentáre adresár, ak chcete odstrániť všetky zobrazenia komentárov. Nebudú potrebné.
Ďalej je potrebné odstrániť niektoré akcie z radiča komentárov. Všetko, čo je potrebné, je vytvoriť a zničiť akcie. Všetky ostatné akcie môžu byť vymazané. Pretože radič Comments je teraz len útržok bez zobrazení, musíte zmeniť niekoľko miest v kontroléri, kde sa pokúša presmerovať na radič Comments. Kdekoľvek je hovor presmerovaný, zmeňte ho na redirect_to (@ comment.post). Nižšie je uvedený kompletný radič komentárov.
Jeden z posledných kusov, ktorý treba uviesť, je formulár pripomienok, ktorý je v skutočnosti pomerne jednoduchá úloha. V zásade je potrebné urobiť dve veci: vytvoriť nový objekt Comment v akcii show radiča príspevkov a zobraziť formulár, ktorý sa odošle do akcie create radiča Comments. Ak to chcete urobiť, upravte akciu show v radiči príspevkov tak, aby vyzerala takto. Pridaný riadok je uvedený tučným písmom.
Posledným krokom je skutočné zobrazenie komentáre. Pri zobrazovaní vstupných údajov používateľa je potrebné postupovať opatrne, pretože používateľ by sa mohol pokúsiť vložiť značky HTML, ktoré by mohli stránku narušiť. Aby sa tomu zabránilo, hod používa sa metóda. Táto metóda unikne všetkým značkám HTML, ktoré sa používateľ pokúša zadať. V ďalšej iterácii by sa mohol použiť značkovací jazyk, napríklad RedCloth alebo metóda filtrovania, aby používatelia mohli uverejňovať určité značky HTML.
Komentáre sa zobrazia s čiastočnými čiastkami, rovnako ako príspevky. Vytvorte súbor s názvom app / views / príspevkov / _comment.html.erb a vložte doň nasledujúci text. Zobrazí komentár a, ak je používateľ prihlásený a môže komentár odstrániť, zobrazí tiež odkaz Zničiť, aby sa komentár zničil.
Ak chcete zobraziť všetky komentáre príspevku naraz, zavolajte ich čiastočne : collection => @ post.comments. Týmto sa označia komentáre ako čiastočné pre každý komentár, ktorý patrí k príspevku. Pridajte nasledujúci riadok k zobrazeniu zobrazenia v radiči príspevkov.
V nasledujúcej iterácii tutoriálu bude simple_format nahradený zložitejším formátovacím nástrojom s názvom RedCloth. RedCloth umožňuje používateľom vytvárať obsah pomocou jednoduchých značiek, napríklad * tučným písmom * tučným písmom a _italic_ kurzívou. Toto bude dostupné pre blogové plagáty aj pre komentátorov.