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 in app/views/layouts/ (oder application wenn keine Übereinstimmung gefunden wird)
  • Standardmäßig eine Ansicht namens index.html.erb in app/views/people/
  • Wenn Sie eine andere Datei namens index_new.html.erb rendern möchten, index_new.html.erb Sie Code in PeopleController#index action wie render 'index_new'
  • Wir können für jede action verschiedene layouts render 'index_new', layout: 'your_layout_name' indem Sie render '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 in app/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 neuen config.autoload_paths += %W( #{config.root}/app/models/products ) möchten, müssen Sie config.autoload_paths += %W( #{config.root}/app/models/products ) zu Ihrer application.rb hinzufügen, um sie config.autoload_paths += %W( #{config.root}/app/models/products ) zu config.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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow