Ruby on Rails
Regeln der Namensgebung
Suche…
Controller
Die Namen der Controller-Klassen sind pluralisiert. Der Grund ist, dass der Controller mehrere Instanzen der Objektinstanz steuert.
Zum Beispiel : OrdersController
wäre der Controller für eine orders
Tabelle. Rails sucht dann nach der Klassendefinition in einer Datei namens orders_controller.rb
im orders_controller.rb
/app/controllers
.
Zum Beispiel : PostsController
wäre der Controller für eine posts
Tabelle.
Wenn der Name der Controller-Klasse mehrere Wörter enthält, wird angenommen, dass der Tabellenname Unterstriche zwischen diesen Wörtern enthält.
Zum Beispiel: Wenn ein Controller PendingOrdersController
dann wird der Dateiname für diesen Controller pending_orders_controller.rb
.
Modelle
Das Modell wird nach der Klassennamenskonvention von MixedCase ohne Unterbrechung benannt und ist immer das Singular des Tabellennamens.
Beispiel : Wenn eine Tabelle mit dem Namen orders
, würde das zugehörige Modell den Namen Order
Beispiel : Wenn eine Tabelle mit posts
, würde das zugehörige Modell als Post
Rails sucht dann in einer Datei namens order.rb
im order.rb
/app/models
nach der Klassendefinition.
Wenn der Modellklassenname mehrere Wörter mit Großschreibung enthält, wird angenommen, dass der Tabellenname Unterstriche zwischen diesen Wörtern aufweist.
Zum Beispiel: Wenn ein Modell mit dem Namen wird BlogPost
dann angenommen Tabellenname wird blog_posts
.
Ansichten und Layouts
Wenn eine Controller-Aktion ausgeführt wird, versucht Rails basierend auf dem Namen des Controllers, ein übereinstimmendes Layout und eine passende Ansicht zu finden.
Ansichten und Layouts werden im app/views
Verzeichnis abgelegt.
Bei einer Anfrage an die PeopleController#index
Aktion sucht Rails nach:
- das Layout namens
people
inapp/views/layouts/
(oderapplication
wenn keine Übereinstimmung gefunden wird) - Standardmäßig eine Ansicht namens
index.html.erb
inapp/views/people/
- Wenn Sie eine andere Datei namens
index_new.html.erb
rendern möchten,index_new.html.erb
Sie Code inPeopleController#index
action wierender 'index_new'
- Wir können für jede
action
verschiedenelayouts
render 'index_new', layout: 'your_layout_name'
indem Sierender 'index_new', layout: 'your_layout_name'
schreiben.render 'index_new', layout: 'your_layout_name'
Dateinamen und automatisches Laden
Rails-Dateien - und Ruby-Dateien im Allgemeinen - sollten mit lower_snake_case
Dateinamen lower_snake_case
. Z.B
app/controllers/application_controller.rb
ist die Datei, die die ApplicationController
Klassendefinition enthält. Beachten Sie, dass, während PascalCase
für Klassen- und PascalCase
verwendet wird, die Dateien, in denen sie sich befinden, immer noch lower_snake_case
.
Eine konsistente Benennung ist wichtig, da Rails nach Bedarf Dateien automatisch lädt und "Flexion" verwendet, um zwischen verschiedenen Benennungsstilen zu transformieren, z. B. zum Umwandeln von application_controller
in ApplicationController
und wieder zurück.
Wenn Rails beispielsweise BlogPost
dass die BlogPost
Klasse nicht vorhanden ist (noch nicht geladen wurde), sucht es nach einer Datei namens blog_post.rb
und versucht, diese Datei zu laden.
Es ist daher auch wichtig, Dateien nach dem zu benennen, was sie enthalten, da der Autoloader erwartet, dass Dateinamen mit dem Inhalt übereinstimmen. Wenn zum Beispiel die blog_post.rb
stattdessen eine Klasse mit dem Namen Post
, wird ein LoadError
: Expected [some path]/blog_post.rb to define BlogPost
.
Wenn Sie ein Verzeichnis unter app/something/
hinzufügen (z. B. / models / products /) und
- Wenn Sie Module und Klassen innerhalb des neuen Verzeichnisses benennen möchten, müssen Sie nichts tun, und es wird selbst geladen. Zum Beispiel
app/models/products/ you would need to wrap your class in
inapp/models/products/ you would need to wrap your class in
Modul Products einbetten. -
config.autoload_paths += %W( #{config.root}/app/models/products )
Sie keine Module und Klassen innerhalb meines neuenconfig.autoload_paths += %W( #{config.root}/app/models/products )
möchten, müssen Sieconfig.autoload_paths += %W( #{config.root}/app/models/products )
zu Ihrerapplication.rb
hinzufügen, um sieconfig.autoload_paths += %W( #{config.root}/app/models/products )
zuconfig.autoload_paths += %W( #{config.root}/app/models/products )
.
Eine weitere Sache, auf die Sie achten sollten (vor allem, wenn Englisch nicht Ihre Muttersprache ist), ist die Tatsache, dass Rails unregelmäßige Plural-Substantive in Englisch berücksichtigt. Wenn Sie ein Modell mit dem Namen "Foot" haben, muss der entsprechende Controller "FeetController" und nicht "FootsController" genannt werden, wenn das "magische" Routing von Rails (und viele weitere solcher Funktionen) funktionieren soll.
Modellklasse vom Controller-Namen
Sie können eine Model-Klasse von einem Controllernamen auf folgende Weise erhalten (Kontext ist Controller-Klasse):
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