Όταν γράφετε τα δικά σας προγράμματα από την αρχή μέχρι το τέλος, είναι εύκολο να τα δείτε έλεγχος ροής. Το πρόγραμμα ξεκινά εδώ, υπάρχει ένας βρόχος εκεί, οι κλήσεις μεθόδων είναι εδώ, είναι όλοι ορατοί. Αλλά σε μια εφαρμογή Rails, τα πράγματα δεν είναι τόσο απλά. Με ένα πλαίσιο οποιουδήποτε είδους, απομακρύνετε τον έλεγχο τέτοιων πράξεων όπως "ροή" υπέρ ενός ταχύτερου ή απλούστερου τρόπου για να κάνετε πολύπλοκα καθήκοντα. Στην περίπτωση του Ruby on Rails, ο έλεγχος ροής χειρίζεται όλα πίσω από τις σκηνές και όλα όσα έχετε μείνει είναι (περισσότερο ή λιγότερο) μια συλλογή μοντέλων, προβολής και ελεγκτών.
Ο πυρήνας οποιασδήποτε εφαρμογής ιστού είναι το HTTP. Το HTTP είναι το πρωτόκολλο δικτύου που χρησιμοποιεί το πρόγραμμα περιήγησης ιστού για να μιλήσει σε έναν διακομιστή ιστού. Εδώ προέρχονται όροι όπως "αίτημα", "GET" και "POST", είναι το βασικό λεξιλόγιο αυτού του πρωτοκόλλου. Ωστόσο, δεδομένου ότι το Rails είναι μια αφαίρεση αυτού, δεν θα περάσουμε πολύ χρόνο μιλώντας γι 'αυτό.
Όταν ανοίγετε μια ιστοσελίδα, κάνετε κλικ σε ένα σύνδεσμο ή υποβάλλετε μια φόρμα σε ένα πρόγραμμα περιήγησης ιστού, το πρόγραμμα περιήγησης θα συνδεθεί με έναν διακομιστή ιστού μέσω του TCP / IP. Το πρόγραμμα περιήγησης στη συνέχεια στέλνει στον διακομιστή ένα "αίτημα", σκεφτείτε το σαν μια φόρμα αλληλογραφίας που το πρόγραμμα περιήγησης συμπληρώνει ζητώντας πληροφορίες σε μια συγκεκριμένη σελίδα. Ο διακομιστής αποστέλλει τελικά στον περιηγητή ιστού μια "απάντηση". Το Ruby on Rails δεν είναι ο διακομιστής web, όμως, ο διακομιστής ιστού μπορεί να είναι οτιδήποτε από τον Webrick (αυτό που συμβαίνει συνήθως όταν ξεκινάτε από το διακομιστή Rails από ο
γραμμή εντολών) στο Apache HTTPD (ο διακομιστής ιστού που ενεργοποιεί το μεγαλύτερο μέρος του ιστού). Ο διακομιστής ιστού είναι απλώς διευκολυντής, παίρνει το αίτημα και το παραδίδει στην εφαρμογή Rails, η οποία παράγει την απάντηση και τα περάσματα είναι πίσω στο διακομιστή, η οποία με τη σειρά του στέλνει πίσω στο πελάτης. Έτσι, η ροή μέχρι τώρα είναι:Ένα από τα πρώτα πράγματα που κάνει μια εφαρμογή Rails με ένα αίτημα είναι να τα στείλει μέσω του δρομολογητή. Κάθε αίτημα έχει μια διεύθυνση URL, αυτό εμφανίζεται στη γραμμή διευθύνσεων ενός προγράμματος περιήγησης ιστού. Ο δρομολογητής καθορίζει τι πρέπει να γίνει με αυτήν τη διεύθυνση URL, αν η διεύθυνση URL έχει νόημα και εάν η διεύθυνση URL περιέχει οποιεσδήποτε παραμέτρους. Ο δρομολογητής είναι διαμορφωμένος σε config / routess.rb.
Πρώτον, γνωρίζετε ότι ο τελικός στόχος του δρομολογητή είναι να ταιριάζει με μια διεύθυνση URL με ελεγκτή και ενέργεια (περισσότερα για αυτά αργότερα). Και επειδή οι περισσότερες εφαρμογές Rails είναι RESTful και τα πράγματα σε RESTful εφαρμογές εκπροσωπούνται χρησιμοποιώντας πόρους, θα δείτε γραμμές όπως πόροι: θέσεις σε τυπικές εφαρμογές Rails. Αυτό αντιστοιχεί σε διευθύνσεις URL όπως /posts/7/edit με τον ελεγκτή Posts, το επεξεργασία δράση στο ταχυδρομείο με την ταυτότητα του 7. Ο δρομολογητής αποφασίζει μόνο πού πηγαίνουν τα αιτήματα. Επομένως το μπλοκ μας [Rails] μπορεί να επεκταθεί λίγο.
Τώρα που ο δρομολογητής έχει αποφασίσει ποιος υπεύθυνος επεξεργασίας πρέπει να στείλει το αίτημα και σε ποια ενέργεια στον υπεύθυνο επεξεργασίας, το στέλνει. Ένας ελεγκτής είναι μια ομάδα σχετικών ενεργειών, οι οποίες συνολικά συνδυάζονται σε μια τάξη. Για παράδειγμα, σε ένα blog, ολόκληρος ο κώδικας για προβολή, δημιουργία, ενημέρωση και διαγραφή αναρτήσεων ιστολογίου συνοδεύεται μαζί σε έναν ελεγκτή που ονομάζεται "Δημοσίευση". Οι ενέργειες είναι απλές μεθόδων της κατηγορίας αυτής. Οι ελεγκτές βρίσκονται στο app / ελεγκτές.
Ας πούμε ότι το πρόγραμμα περιήγησης ιστού έστειλε ένα αίτημα /posts/42. Ο δρομολογητής αποφασίζει ότι αυτό αναφέρεται στο Θέση ελεγκτής, το προβολή και η ταυτότητα της θέσης που θα εμφανιστεί είναι 42, οπότε καλεί το προβολή με αυτήν την παράμετρο. ο προβολή η μέθοδος δεν είναι υπεύθυνη για τη χρήση του μοντέλου για την ανάκτηση των δεδομένων και τη χρήση της προβολής για τη δημιουργία της εξόδου. Έτσι, η επεκταμένη μας ομάδα [Rails] είναι τώρα:
Το μοντέλο είναι και το πιο απλό και κατανοητό και πιο δύσκολο να εφαρμοστεί. Το Μοντέλο είναι υπεύθυνο για την αλληλεπίδραση με τη βάση δεδομένων. Ο απλούστερος τρόπος για να το εξηγήσω είναι ότι το μοντέλο είναι ένα απλό σύνολο κλήσεων μεθόδου που επιστρέφουν απλά αντικείμενα Ruby που χειρίζονται όλες τις αλληλεπιδράσεις (διαβάζει και γράφει) από τη βάση δεδομένων. Έτσι, ακολουθώντας το παράδειγμα του ιστολογίου, το API που θα χρησιμοποιήσει ο ελεγκτής για να ανακτήσει τα δεδομένα χρησιμοποιώντας το μοντέλο θα μοιάζει με κάτι παρόμοιο Post.find (παραμέτρους [: id]). ο params είναι αυτό που ο δρομολογητής αναλύθηκε από τη διεύθυνση URL, το Post είναι το μοντέλο. Αυτό δημιουργεί ερωτήματα SQL ή κάνει ό, τι χρειάζεται για να ανακτήσει την ανάρτηση ιστολογίου. Τα μοντέλα βρίσκονται στο app / models.
Είναι σημαντικό να σημειωθεί ότι δεν χρειάζονται όλες οι ενέργειες για τη χρήση ενός μοντέλου. Η αλληλεπίδραση με το μοντέλο απαιτείται μόνο όταν τα δεδομένα πρέπει να φορτωθούν από τη βάση δεδομένων ή να αποθηκευτούν στη βάση δεδομένων. Ως εκ τούτου, θα θέσουμε ένα ερωτηματικό μετά από αυτό στο μικρό μας διάγραμμα ροής.
Τέλος, ήρθε η ώρα να ξεκινήσετε να δημιουργείτε κάποια HTML. Το HTML δεν χειρίζεται ο ίδιος ο ελεγκτής, ούτε χειρίζεται το μοντέλο. Το σημείο χρήσης ενός πλαισίου MVC είναι να διαιρέσει τα πάντα. Οι λειτουργίες βάσης δεδομένων παραμένουν στη λειτουργία, η γενιά HTML παραμένει στην προβολή και ο ελεγκτής (ο οποίος καλείται από το δρομολογητή) τους καλεί και τους δύο.
Το HTML παράγεται κανονικά χρησιμοποιώντας ενσωματωμένο Ruby. Εάν είστε εξοικειωμένοι με την PHP, δηλαδή ένα αρχείο HTML με κώδικα PHP ενσωματωμένο σε αυτό, τότε ενσωματωμένο Ruby θα είναι πολύ εξοικειωμένοι. Αυτές οι απόψεις βρίσκονται στο app / προβολές, και ένας ελεγκτής θα καλέσει ένα από αυτά για να παραγάγει την έξοδο και να την στείλει ξανά στον εξυπηρετητή ιστού. Οποιαδήποτε δεδομένα ανακτώνται από τον ελεγκτή χρησιμοποιώντας το μοντέλο θα αποθηκεύονται γενικά σε ένα instance μεταβλητή η οποία, χάρη σε κάποια μαγεία Ruby, θα είναι διαθέσιμη ως μεταβλητές στιγμής από την προβολή. Επίσης, το ενσωματωμένο Ruby δεν χρειάζεται να παράγει HTML, μπορεί να δημιουργήσει οποιοδήποτε τύπο κειμένου. Θα δείτε αυτό όταν δημιουργείτε XML για RSS, JSON, κλπ.
Αυτή η έξοδος αποστέλλεται πίσω στον εξυπηρετητή ιστού, ο οποίος το στέλνει πίσω στο πρόγραμμα περιήγησης ιστού, το οποίο ολοκληρώνει τη διαδικασία.