Επιτρέποντας Σχόλια σχετικά με το Ruby on Rails

Στην προηγούμενη επανάληψη, προσθέτοντας RESTful Authentication, προστέθηκε ταυτότητα στο ιστολόγιό σας, ώστε μόνο οι εξουσιοδοτημένοι χρήστες να μπορούν να δημιουργούν αναρτήσεις ιστολογίου. Αυτή η επανάληψη θα προσθέσει το τελικό (και σημαντικό) χαρακτηριστικό του blog tutorial: comments. Αφού τελειώσετε με αυτό το σεμινάριο, οι χρήστες θα μπορούν να δημοσιεύουν ανώνυμα σχόλια στις αναρτήσεις ιστολογίου χωρίς να συνδεθούν.

Η δημιουργία των πινάκων βάσης δεδομένων σχολίων και του ελεγκτή γίνεται με τον ίδιο τρόπο με τον τρόπο δημιουργίας των πινάκων βάσεων δεδομένων και του ελεγκτή - χρησιμοποιώντας τη γεννήτρια ικριωμάτων. Η γεννήτρια ικριωμάτων θα δημιουργήσει RESTful ελεγκτές, διαδρομές χάρτη και δημιουργία μεταναστεύσεων βάσεων δεδομένων. Αλλά πριν να το πάρετε αυτό, πρέπει να σκεφτείτε τι είναι ένα σχόλιο και ποια θα είναι τα στοιχεία του. Ένα σχόλιο έχει:

Μόλις αποφασίσετε ποια είναι τα στοιχεία δεδομένων ενός σχολίου, μπορείτε να εκτελέσετε τη γεννήτρια ικριωμάτων. Σημειώστε ότι το post post είναι του τύπου "αναφορές". Αυτός είναι ένας ειδικός τύπος που θα δημιουργήσει ένα πεδίο αναγνωριστικού για να συνδέσει τον πίνακα σχολίων με τον πίνακα αναρτήσεων μέσω ενός ξένου κλειδιού.

instagram viewer

Μόλις δημιουργηθούν οι ελεγκτές και οι μεταναστεύσεις, μπορείτε να προχωρήσετε και να εκτελέσετε τη μετάβαση εκτελώντας την εργασία db: migrate rake.

Αφού τοποθετηθούν οι πίνακες βάσης δεδομένων, μπορείτε να ξεκινήσετε τη ρύθμιση του μοντέλου. Στο μοντέλο, υπάρχουν πράγματα όπως οι επικυρώσεις δεδομένων - για να διασφαλιστεί η ύπαρξη απαιτούμενων πεδίων - και οι σχέσεις μπορούν να οριστούν. Θα χρησιμοποιηθούν δύο σχέσεις.

Μια δημοσίευση στο blog έχει πολλά σχόλια. Η σχέση has_many δεν απαιτεί ειδικά πεδία στον πίνακα αναρτήσεων, αλλά ο πίνακας σχολίων έχει post_id για να συνδεθεί με τον πίνακα αναρτήσεων. Από Ράγες, μπορείτε να πείτε τα πράγματα όπως @ post.comments για να λάβετε μια λίστα αντικειμένων Comment που ανήκουν στο αντικείμενο @post. Τα σχόλια είναι επίσης εξαρτώμενος στο γονικό αντικείμενο Post. Εάν καταστρέφεται το αντικείμενο Post, πρέπει να καταστραφούν όλα τα αντικείμενα σχολίων παιδιών.

Ένα σχόλιο ανήκει σε ένα post object. Ένα σχόλιο μπορεί να συσχετιστεί μόνο με μια μοναδική ανάρτηση ιστολογίου. Η σχέση ανήκει_ μόνο απαιτεί ένα μόνο post_id πεδίο να είναι στον πίνακα σχολίων. Για να αποκτήσετε πρόσβαση στο γονικό αντικείμενο σχολίου ενός σχολίου, μπορείτε να πείτε κάτι σαν αυτό @ comment.post σε Rails.

Τα παρακάτω είναι τα μοντέλα Post and Comment. Έχουν προστεθεί αρκετές επικυρώσεις στο μοντέλο σχολίων για να διασφαλιστεί ότι οι χρήστες συμπληρώνουν τα απαιτούμενα πεδία. Σημειώστε επίσης τις σχέσεις has_many και ανήκει σε.

Ο ελεγκτής των σχολίων δεν θα χρησιμοποιηθεί με τον παραδοσιακό τρόπο που χρησιμοποιείται ένας ελεγκτής RESTful. Πρώτον, θα έχει πρόσβαση μόνο από τις προβολές Post. Οι φόρμες σχόλιου και η εμφάνιση είναι αποκλειστικά στη δράση εμφάνισης του ελεγκτή Post. Έτσι, για να ξεκινήσετε, διαγράψτε το σύνολο app / views / comments για να διαγράψετε όλες τις προβολές σχολίων. Δεν θα χρειαστούν.

Στη συνέχεια, πρέπει να διαγράψετε ορισμένες από τις ενέργειες από τον ελεγκτή σχολίων. Το μόνο που χρειάζεται είναι το δημιουργώ και καταστρέφω Ενέργειες. Όλες οι άλλες ενέργειες μπορούν να διαγραφούν. Επειδή ο ελεγκτής σχολίων είναι τώρα απλώς ένα στέλεχος χωρίς προβολές, πρέπει να αλλάξετε μερικές θέσεις στον ελεγκτή όπου προσπαθεί να ανακατευθύνει στον ελεγκτή σχολίων. Όπου υπάρχει μια κλήση redirect_to, πρέπει να την αλλάξετε redirect_to (@ comment.post). Παρακάτω είναι ο πλήρης ελεγκτής σχολίων.

Ένα από τα τελικά κομμάτια που πρέπει να τεθούν σε εφαρμογή είναι η μορφή σχολίων, η οποία είναι στην πραγματικότητα ένα μάλλον απλό έργο. Υπάρχουν δύο βασικά πράγματα που πρέπει να κάνετε: Δημιουργήστε ένα νέο αντικείμενο Σχόλιο στη δράση επίδειξης του ελεγκτή αναρτήσεων και εμφανίστε μια φόρμα που υποβάλλει στη δράση δημιουργίας του ελεγκτή σχολίων. Για να το κάνετε αυτό, τροποποιήστε τη δράση εμφάνισης στον ελεγκτή αναρτήσεων για να μοιάσετε με τα παρακάτω. Η προστιθέμενη γραμμή είναι με έντονη γραφή.

Το τελευταίο βήμα είναι να εμφανίσετε το σχόλια. Πρέπει να δίνεται προσοχή κατά την εμφάνιση δεδομένων εισόδου χρήστη, καθώς ένας χρήστης μπορεί να προσπαθήσει να εισαγάγει ετικέτες HTML που θα μπορούσαν να διαταράξουν τη σελίδα. Για να αποφευχθεί αυτό, το h χρησιμοποιείται. Αυτή η μέθοδος θα ξεφύγει από τυχόν ετικέτες HTML που προσπαθεί να εισάγει ο χρήστης. Σε μια άλλη επανάληψη, θα μπορούσε να εφαρμοστεί μια γλώσσα σήμανσης όπως το RedCloth ή μια μέθοδος φιλτραρίσματος για να επιτρέπεται στους χρήστες να δημοσιεύουν ορισμένες ετικέτες HTML.

Τα σχόλια θα εμφανίζονται με μερική, ακριβώς όπως ήταν οι αναρτήσεις. Δημιουργήστε ένα αρχείο που καλείται app / views / posts / _comment.html.erb και τοποθετήστε το παρακάτω κείμενο σε αυτό. Θα εμφανίσει το σχόλιο και, εάν ο χρήστης συνδεθεί και μπορεί να διαγράψει το σχόλιο, θα εμφανιστεί επίσης ο σύνδεσμος Destroy για να καταστρέψει το σχόλιο.

Τέλος, για να εμφανίσετε όλα τα σχόλια μιας μετάδοσης ταυτόχρονα, καλέστε τα σχόλια μερικά με : collection => @ post.comments. Αυτό θα καλεί τα σχόλια μερικά για κάθε σχόλιο που ανήκει στη θέση. Προσθέστε την ακόλουθη γραμμή στην προβολή εμφάνισης στον ελεγκτή δημοσιεύσεων.

Στην επόμενη επαναληπτική εκμάθηση, το simple_format θα αντικατασταθεί με μια πιο περίπλοκη μηχανή μορφοποίησης που ονομάζεται RedCloth. Το RedCloth επιτρέπει στους χρήστες να δημιουργούν περιεχόμενο με εύκολη σήμανση όπως * bold * για έντονους χαρακτήρες και _italical_ για πλάγια γραφή. Αυτό θα είναι διαθέσιμο τόσο για τις αφίσες ιστολογίου όσο και για τους σχολιαστές.