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 in app/views/layouts/ (o application se non viene trovata alcuna corrispondenza)
  • una vista chiamata index.html.erb in app/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'azione PeopleController#index render 'index_new' PeopleController#index come render 'index_new'
  • possiamo impostare diversi layouts per ogni action scrivendo render '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 aggiungere config.autoload_paths += %W( #{config.root}/app/models/products ) al tuo application.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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow