traube jede Entität in einer einzigen Datei

8

Ich möchte mehrere Klassen in der traube Entity-Datei haben, dies ist die Ordnerstruktur app / api / proj / api / v2 / entities / committees.rb

%Vor%

und in der Grape API

%Vor%

funktioniert. aber wenn ich mit

präsentiere %Vor%

Es funktioniert nicht. Aber es funktioniert, wenn ich es in eine neue Datei namens committee_list.rb innerhalb von Entitäten verschiebe.

    
Anbazhagan p 15.04.2017, 13:09
quelle

1 Antwort

5

Sie scheinen einige wichtige Informationen aus Ihrem Post zu verpassen, weil Sie nirgendwo eine Klasse mit dem Namen CommitteeList oder CommitteeBase definiert haben. Ich nehme an, dass Sie sie definiert haben und dass Sie diesen Code nicht zur Verfügung gestellt haben.

Das Problem, mit dem Sie zu tun haben, hängt damit zusammen, wie Rails die Klassen automatisch lädt. Es gibt weitere Informationen verfügbar an anderer Stelle , aber im Wesentlichen sollten Sie sicherstellen, dass Ihre Klassen-, Modul-, Verzeichnis- und Dateinamen übereinstimmen. Der Grund, warum es funktioniert, wenn Sie Ihre CommitteeList -Klasse in eine eigene Datei verschieben, liegt daran, dass Rails die Klasse dynamisch finden kann.

Ich musste ein paar Ratespiele machen, basierend auf dem, was Sie zur Verfügung gestellt haben, aber Sie wollen etwas, das so aussieht:

%Vor%

Beachten Sie, dass ich in diesem Beispiel einige Dinge umbenannt habe; Ihre Klassennamen sollten Singular ( committee nicht committees ) sein und die Dateinamen sollten ihnen entsprechen, aber diese Änderung kann andere Probleme in Ihrer App verursachen. Im Allgemeinen sollten Sie Singular und nicht Plural verwenden.

Ich empfehle den Rails Guide-Eintrag für Konstanten und Autoloading für weitere Details.

Aktualisiert:

In Ihrem Kern sagen Sie, dass Sie Uninitialized constant PROJ::API::V2::Entities::CommitteeOffice erhalten, wenn Sie present @committees, with: PROJ::API::V2::Entities::CommitteeOffice mit dem folgenden Code ausführen:

%Vor%

Sie erhalten diesen Fehler, weil Rails nur nach der Klasse PROJ::API::V2::Entities::CommitteeBase in der Datei entities/committee_base.rb sucht. Wenn Sie eine einzelne monolithische Datei für Ihre Entitätsklassen verwenden möchten, müssen Sie die obige Datei app/api/proj/api/v2/entities.rb nennen.

Durch Angabe der Datei app/api/proj/api/v2/entities.rb wird Rails mitgeteilt "Diese Datei enthält das Modul Entities und alle zugehörigen Klassen."

    
anothermh 17.04.2017, 18:43
quelle