2011-01-07 6 views
31

Ich habe ein mehr als 100 Modelle in meiner Rails-Anwendung, und nur für die Organisation, ich sie in Ordner unterteilt, alle noch unter dem Haupt-Modellordner, nur um es einfacher zu machen, auf dem Projekt zu navigieren und Dateien angezeigt, die verwandt sind .Ist es eine schlechte Idee, die Modelle in Verzeichnisse zu unterteilen?

Ist das eine schlechte Idee? Was ist der Weg, um dies zu tun?

+0

Über 100 Modelle? Ist es ein großes Projekt? –

Antwort

62

Nein, es ist keine schlechte Idee. Viele Leute machen das und ich könnte in großen Anwendungen nicht ohne sie leben.

Es gibt zwei Möglichkeiten, es zu tun:

Die erste ist nur Ihre Modelle zu bewegen. Sie müssen jedoch Rails mitteilen, dass es die eigenwilligen Modelle laden soll (da es nicht weiß, wo sie sind). So etwas sollte den Trick erfüllen:

# In config/application.rb 
module YourApp 
    class Application < Rails::Application 
    # Other config options 

    config.autoload_paths << Dir["#{Rails.root}/app/models/*"] 
    end 
end 

Der erste Weg ist einfach, aber ist nicht wirklich der beste Weg. Der zweite Weg beinhaltet Namensräume Ihre Modelle mit Gruppen in sie sind. Das bedeutet, dass anstelle von User und UserGroup und UserPermissions mit, Sie haben User, User::Group und User::Permission.

Um dies zu nutzen, ein Modell wie folgt erzeugen: rails generate model User::Group. Rails erstellt automatisch alle Ordner für Sie. Ein weiterer Vorteil ist, dass mit diesem Ansatz, werden Sie das vollständige Modell müssen Namen für Verbände in einem Namespace nicht buchstabieren:

class User < ActiveRecord::Base 
    belongs_to :group # Rails will detect User::Group as it's in the same namespace 
end 

class User::Group < ActiveRecord::Base 
    has_many :users 
end 

Sie können jedoch viele Ebenen von Namespacing angeben, wie Sie wollen, so würde User::Group::Permission sein möglich.

+0

Sie müssen die Unterverzeichnisse nicht zum Ladepfad hinzufügen, da app/models bereits dort ist. Durch Verweis auf ein verschachteltes Modell wie "Benutzer :: Gruppe" lädt Rails es automatisch, indem es in diese Pfade schaut. Alle 'app' Konstanten werden im Produktionsmodus geladen. –

+0

@Ryan Ja, wenn Sie Ihre Modelle namespace. Wenn Sie sie nicht mit einem Namespace versehen, sie jedoch immer noch in Unterordnern speichern, fügen Sie die Pfade nicht zu Config hinzu. autoload_paths', sie werden nicht geladen. – vonconrad

16

Für 100 Modelle, es ist praktisch eine Voraussetzung. 100 Modelle sind in einem Verzeichnis laut.

dieses Versuchen eine Vorstellung von der Rails Way (tm)

rails new MultiDirectoryExample 
cd MultiDirectoryExample 
rails generate scaffold User::Photo description:string 

Sehen Sie das Skript-Ausgabe und sehen die generierten Dateien zu erhalten.

Verwandte Themen