2010-06-02 4 views
3

Je vais avoir une tonne de sous-classes, donc je veux les organiser sous un sous-dossier appelé flux. J'ai ajouté la ligne suivante à la environment.rb de telle sorte que toutes les classes dans le sous-dossier seraient chargés:Rails: Création de sous-dossiers dans le modèle?

  Rails::Initializer.run do |config| 
... 
      config.load_paths += Dir["#{RAILS_ROOT}/app/models/*"].find_all { |f| File.stat(f).directory? } 
... 
    end 

Je pensais que cela résoudrait le problème dans lequel, par convention, la classe modèle est un module dans un espace de noms suivant. Cependant, quand je tente d'appeler une des classes appelées flux dans le dossier de flux, je reçois l'erreur suivante:

NoMethodError: undefined method `new' for Stream:Module 
    from (irb):28 
    from /usr/local/bin/irb:12:in `<main>' 

Voici le modèle pour le parent et un enfant:

class Stream 
end 

class EventStream < Stream 
end 

Toute idée quel est le problème?

+0

Essayé cela et a obtenu la même erreur: config.load_paths + =% W [# {RAILS_ROOT}/app/models/stream]. – keruilin

Répondre

-1

Pouvez-vous poster votre code modèle? Le code pour le parent et au moins un modèle enfant. Envisagez-vous de faire quelque chose comme Stream & & Stream :: Client?

Je ne suis pas sûr si vous supposez que les modèles vont hériter de la sous-classe ou que vous ajoutez dans la sous-classe pour chaque modèle. Sachez simplement que les modèles ne sont pas imbriqués dans votre code en raison de leur emplacement sur le système de fichiers plutôt que des modules dans lesquels se trouve une classe, mais nous ne pouvons pas le dire à partir de votre message initial.

+0

Nécessaire pour utiliser la syntaxe: Stream :: Client – keruilin

+0

Ne pas sonder à l'intérieur d'une réponse, faites-le dans un commentaire à la question d'origine. – Noz

Questions connexes