Αλλάζοντας τα αυτόματα ονόματα των helpers ενός resource

Μια βασική αρχή της rails είναι το "convention over configuration" ή με πιο απλά λόγια ακολουθεί κάποιες συμβάσεις για το πώς θα λειτουργούν κάποια πράγματα και έτσι δεν χρειάζεται εμείς κάθε φορά να κάνουμε όλες τις ρυθμίσεις που απαιτεί μια νέα web application.

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

Το convention over configuration όμως δε μας περιορίζει σε τίποτα. Αντίθετα έχουμε τη δυνατότητα και την ελευθερία να αλλάξουμε αυτούς τους κανόνες για να ανταποκρίνονται στις δικές μας απαιτήσεις και ανάγκες κάθε φορά. Ένα παράδειγμα αλλαγής του παραπάνω κανόνα με τα tables θα ήταν το εξής:

Έστω ότι έχουμε ένα model με το όνομα dolphin. Η rails θα περίμενε το table που έχει στη βάση να έχει το όνομα dolphins (τον πληθυντικό του στα αγγλικά). Αυτό πολύ εύκολα θα μπορούσαμε να το αλλάξουμε γράφοντας μέσα στο αρχείο του model set_table_name 'dolphin' ή ότι άλλο όνομα θέλαμε στη θέση του dolphin και έτσι η rails θα έβλεπε αυτό το όνομα, για όνομα table στη βάση μας. Αυτό είναι ένα αρκετά συνηθισμένο φαινόμενο όταν χρησιμοποιούμε μια βάση που υπάρχει ήδη και θέλουμε να την χρησιμοποιήσουμε με μια νέα εφαρμογή φτιαγμένη σε rails.

Ο λόγος αυτού του άρθρου είναι όμως για ένα άλλο convention που θέλαμε πρόσφατα να αντικαταστήσουμε. Φτιάχναμε μια εφαρμογή για φροντιστήρια και πάνω στη βιασύνη μας που κάναμε prototype την εφαρμογή αποφασίσαμε να ονομάσουμε frontistiria ένα resource. Βάζοντας στο routes.rb (το αρχείο που ορίζονται τα urls κλπ. σε μια rails application) την εντολή resources :frontistiria και πατώντας rake routes στο terminal για να δούμε τα paths που μας δημιούργησε, αντικρύσαμε το παρακάτω:

Η rails δε μπόρεσε να καταλάβει τι ακριβώς λέξη είναι το "frontistiria" (αναγνωρίζει προφανώς μόνο αγγλικά και όχι greeklish), προσπάθησε να το βάλει στον πληθυντικό και πήραμε αυτό το ομολογουμένως αστείο "frontistirium"! (Το frontistiria, new_frontistirium κλπ. είναι αυτόματοι helpers που δημιουργεί η rails με ένα resource και χρησιμοποιούνται για ευκολία και καλύτερη εμφάνιση του κώδικα σε redirects κλπ. Θα μπορούσαμε πολύ εύκολα να χρησιμοποιήσουμε κάτι σαν :url => {:controller => 'frontistiria', :action => 'index' ή κάτι αντίστοιχο και να μας πηγαίνει εκεί που θέλουμε χωρίς να χρησιμοποιήσουμε αυτές τις helper methods).

Παρόλα αυτά για να το παρακάμψουμε και να χρησιμοποιήσουμε frontistirio για ενικό και frontistiria για πληθυντικό, αρκεί να γράψουμε στο routes.rb το εξής:

ActiveSupport::Inflector.inflections do |inflect| inflect.irregular 'frontistirio', 'frontistiria' end

Όπου του δηλώνουμε το πώς θέλουμε να είναι ο πληθυντικός και ο ενικός και τώρα γράφοντας rake routes μας εμφανίζεται:

Όπου εμφανίζονται οι helpers μας πιο κομψοί. Παρόλα αυτά, στην κανονική application θα χρησιμοποιήσουμε μάλλον αγγλικές λέξεις.

comments powered by Disqus