Ruby on Rails
Convenzioni di denominazione
Ricerca…
Controller
I nomi delle classi controller sono pluralizzati. Il motivo è che il controllore controlla più istanze di istanza di oggetto.
Ad esempio : OrdersController
sarebbe il controller per una tabella di orders
. Rails cercherà quindi la definizione della classe in un file chiamato orders_controller.rb
nella orders_controller.rb
/app/controllers
.
Ad esempio : PostsController
sarebbe il controller per una tabella di posts
.
Se il nome della classe controller ha più parole in maiuscolo, si presume che il nome della tabella abbia underscore tra queste parole.
Ad esempio: se un controller è denominato PendingOrdersController
il nome file presunto per questo controller sarà pending_orders_controller.rb
.
Modelli
Il modello è denominato utilizzando la convenzione di denominazione della classe di MixedCase non interrotto ed è sempre il singolare del nome della tabella.
Ad esempio : se una tabella è stata denominata orders
, il modello associato sarà denominato Order
Ad esempio : se una tabella è stata denominata posts
, il modello associato sarà denominato Post
Rails cercherà quindi la definizione della classe in un file chiamato order.rb
nella order.rb
/app/models
.
Se il nome della classe del modello ha più parole in maiuscolo, si presume che il nome della tabella abbia underscore tra queste parole.
Ad esempio: se un modello è denominato BlogPost
, il nome di tabella presunto sarà blog_posts
.
Viste e layout
Quando viene eseguita un'azione di controller, Rails tenterà di trovare un layout e una visualizzazione corrispondenti in base al nome del controller.
Le viste e i layout sono posizionati nella directory app/views
.
Data una richiesta all'azione PeopleController#index
, Rails cercherà:
- il layout chiamato
people
inapp/views/layouts/
(oapplication
se non viene trovata alcuna corrispondenza) - una vista chiamata
index.html.erb
inapp/views/people/
per impostazione predefinita - se desideri eseguire il rendering di un altro file chiamato
index_new.html.erb
devi scrivere il codice per questo nell'azionePeopleController#index
render 'index_new'
PeopleController#index
comerender 'index_new'
- possiamo impostare diversi
layouts
per ogniaction
scrivendorender 'index_new', layout: 'your_layout_name'
Nomi di file e autoloading
I file Rails - e i file Ruby in generale - dovrebbero essere nominati con lower_snake_case
file lower_snake_case
. Per esempio
app/controllers/application_controller.rb
è il file che contiene la definizione della classe ApplicationController
. Si noti che mentre PascalCase
viene utilizzato per i nomi di classi e moduli, i file in cui risiedono dovrebbero essere ancora lower_snake_case
.
La denominazione coerente è importante poiché Rails utilizza i file di caricamento automatico secondo necessità e utilizza "flection" per trasformare tra diversi stili di denominazione, come la trasformazione di application_controller
in ApplicationController
e viceversa.
Ad esempio, se Rails BlogPost
che la classe BlogPost
non esiste (non è stata ancora caricata), cercherà un file denominato blog_post.rb
e tenterà di caricare quel file.
È quindi anche importante assegnare un nome ai file per ciò che contengono, poiché il caricatore automatico si aspetta che i nomi dei file corrispondano al contenuto. Se, ad esempio, blog_post.rb
contiene invece una classe chiamata solo Post
, verrà visualizzato un LoadError
: Expected [some path]/blog_post.rb to define BlogPost
.
Se aggiungi una dir sotto app/something/
(ad esempio / models / products /), e
- vuoi creare un namespace per i moduli e le classi all'interno della nuova cartella, quindi non devi fare nulla e verrà caricato da solo. Ad esempio, in
app/models/products/ you would need to wrap your class in
modulo Prodotti`. - non voglio creare un namespace per i moduli e le classi all'interno della mia nuova
config.autoload_paths += %W( #{config.root}/app/models/products )
quindi devi aggiungereconfig.autoload_paths += %W( #{config.root}/app/models/products )
al tuoapplication.rb
per autoload.
Un'altra cosa a cui prestare attenzione (specialmente se l'inglese non è la tua prima lingua) è il fatto che Rails conti nomi irregolari plurali in inglese. Quindi se hai un modello chiamato "Piede", il controller corrispondente deve essere chiamato "FeetController" piuttosto che "FootsController" se vuoi che il routing "magico" delle rotte (e molte altre di tali caratteristiche) funzioni.
Classe di modelli dal nome del controller
È possibile ottenere una classe Model da un nome Controller in questo modo (il contesto è classe Controller):
class MyModelController < ActionController::Base
# Returns corresponding model class for this controller
# @return [ActiveRecord::Base]
def corresponding_model_class
# ... add some validation
controller_name.classify.constantize
end
end