Consentire commenti su Ruby on Rails

Nella precedente iterazione, Aggiunta dell'autenticazione RESTful, l'autenticazione è stata aggiunta al tuo blog in modo che solo gli utenti autorizzati possano creare post sul blog. Questa iterazione aggiungerà la funzione finale (e principale) del tutorial del blog: commenti. Al termine di questo tutorial, gli utenti saranno in grado di pubblicare commenti anonimi sui post del blog senza effettuare l'accesso.

La creazione delle tabelle del database dei commenti e del controller avviene in modo analogo alla creazione delle tabelle del database dei post e del controller, utilizzando il generatore di scaffold. Il generatore di scaffold creerà controller RESTful, mapperà le rotte e creerà migrazioni di database. Ma prima di assumere questo, devi pensare a cosa è un commento e quali saranno i suoi membri dei dati. Un commento ha:

Dopo aver deciso quali sono i membri dei dati di un commento, è possibile eseguire il generatore di scaffold. Si noti che il campo postale è del tipo "riferimenti". Questo è un tipo speciale che genererà un campo ID per collegare la tabella dei commenti con la tabella dei post tramite una chiave esterna.

instagram viewer

Una volta generati i controller e le migrazioni, puoi andare avanti ed eseguire la migrazione eseguendo l'attività db: migrate rake.

Una volta posizionate le tabelle del database, è possibile iniziare a configurare il modello. Nel modello, cose come le convalide dei dati - per garantire la presenza dei campi obbligatori - e le relazioni possono essere definite. Saranno utilizzate due relazioni.

Un post sul blog ha molti commenti. La relazione has_many non richiede campi speciali nella tabella dei post, ma la tabella dei commenti ha un post_id per collegarlo alla tabella dei post. A partire dal Rails, puoi dire cose come @ post.comments per ottenere un elenco di oggetti Comment che appartengono all'oggetto @post. I commenti sono anche dipendente sull'oggetto Post principale. Se l'oggetto Posta viene distrutto, anche tutti gli oggetti commento figlio devono essere distrutti.

Un commento appartiene a un oggetto post. Un commento può essere associato solo a un singolo post di blog. La relazione appartiene_a richiede solo un singolo campo post_id per essere nella tabella dei commenti. Per accedere all'oggetto del post principale di un commento, puoi dire qualcosa del genere @ comment.post in Rails.

Di seguito sono riportati i modelli Post e Comment. Diverse convalide sono state aggiunte al modello di commento per garantire che gli utenti compilino i campi richiesti. Nota anche le relazioni has_many e appartiene_to.

Il controller dei commenti non verrà utilizzato nel modo tradizionale in cui viene utilizzato un controller RESTful. In primo luogo, si accederà esclusivamente dalle visualizzazioni dei post. I moduli e la visualizzazione dei commenti sono interamente nell'azione show del controller Post. Quindi, per cominciare, elimina l'intero app / views / commenti directory per eliminare tutte le visualizzazioni dei commenti. Non saranno necessari.

Successivamente, è necessario eliminare alcune delle azioni dal controller Commenti. Tutto ciò che serve è il creare e distruggere Azioni. Tutte le altre azioni possono essere eliminate. Poiché ora il controller commenti è solo uno stub senza visualizzazioni, è necessario modificare alcune posizioni nel controller in cui tenta di reindirizzare al controller commenti. Ovunque vi sia una chiamata redirect_, cambiarla in redirect_to (@ comment.post). Di seguito è riportato il controller completo dei commenti.

Uno dei pezzi finali da mettere in atto è il modulo dei commenti, che in realtà è un compito piuttosto semplice. Ci sono sostanzialmente due cose da fare: creare un nuovo oggetto Comment nell'azione show del controller dei post e visualizzare un modulo che invia all'azione create del controller Comments. Per fare ciò, modifica l'azione show nel controller dei post in modo che sia simile al seguente. La riga aggiunta è in grassetto.

Il passaggio finale consiste nel visualizzare effettivamente il file Commenti. È necessario prestare attenzione quando si visualizzano i dati di input dell'utente in quanto l'utente potrebbe tentare di inserire tag HTML che potrebbero interrompere la pagina. Per evitare ciò, il h viene utilizzato il metodo. Questo metodo sfuggirà a qualsiasi tag HTML che l'utente tenta di inserire. In un'ulteriore iterazione, un linguaggio di markup come RedCloth o un metodo di filtro potrebbe essere applicato per consentire agli utenti di pubblicare determinati tag HTML.

I commenti verranno visualizzati in modo parziale, proprio come i post. Crea un file chiamato app / views / messaggi / _comment.html.erb e inserire il seguente testo in esso. Visualizzerà il commento e, se l'utente ha effettuato l'accesso e può eliminare il commento, visualizzerà anche il link Distruggi per distruggere il commento.

Infine, per visualizzare tutti i commenti di un post contemporaneamente, chiama i commenti parzialmente con : collection => @ post.comments. Questo chiamerà i commenti parziali per ogni commento che appartiene al post. Aggiungi la seguente riga alla vista spettacolo nel post controller.

Nella prossima iterazione del tutorial, simple_format verrà sostituito con un motore di formattazione più complesso chiamato RedCloth. RedCloth consente agli utenti di creare contenuti con markup semplice come * grassetto * per grassetto e _italic_ per corsivo. Questo sarà disponibile sia per i poster del blog che per i commentatori.

instagram story viewer