65 votes

Pour ajouter un répertoire, le chemin de chargement dans les Rails?

Comme des Rails 2.3, ce est la bonne façon d'ajouter un répertoire à la charge du chemin de sorte qu'elle accroche dans les Rails' auto-rechargement mécanismes?

L'exemple spécifique, je pense c'est que j'ai une classe qui possède plusieurs sous-classes à l'aide de la STI et j'ai pensé que ce serait une bonne idée de les mettre dans un sous-répertoire plutôt que de l'encombrement du haut-niveau. Je voudrais donc avoir quelque chose comme:

#app/models/widget.rb
class Widget < ActiveRecord::Base
   add_to_load_path File.join(File.dirname(__FILE__), "widgets")
end

#app/models/widgets/bar_widget.rb
class BarWidget < Widget
end

#app/models/widgets/foo_widget.rb
class FooWidget < Widget
end

C'est l' add_to_load_path méthode que je suis à la recherche pour.

112voto

Jamel Toms Points 944

Dans la version actuelle de Rails (3.2.8), ce qui a été modifié dans l'application.rb fichier.

Le code est actuellement en commentaire:

  # Custom directories with classes and modules you want to be autoloadable.
  # config.autoload_paths += %W(#{config.root}/extras)

Aurez besoin de mettre à jour le autoload_paths valeur. La tentative de modifier l'ancien load_paths variable provoque cette erreur.

/configuration.rb:85:in `method_missing': undefined method `load_paths' for #<Rails::Application::Configuration:0xac670b4> (NoMethodError)

pour un exemple, pour chaque chemin d'accès pour ajouter à autoload_paths config, ajoutez une ligne similaire à la suivante:

config.autoload_paths += %W(#{config.root}/app/validators)

config.autoload_paths accepte un tableau de chemins à partir de laquelle les Rails de chargement automatique des constantes. Par défaut est tous les sous-répertoires app.

http://guides.rubyonrails.org/configuring.html


À partir des auteurs (hakunin) ci-dessous:

Si le répertoire est dans le dossier app/, vous n'avez pas besoin d'ajouter n'importe où, il devrait fonctionner par défaut (certainement dans 3.2.12). Rails a eager_load_paths qui agit comme autoload_paths en développement, et désireux de charge dans la production. Tous app/* répertoires sont automatiquement ajoutés.

63voto

ryanb Points 11043

Pour les anciennes versions de Rails:

Vous pouvez le faire dans votre environnement.rb fichier de configuration.

config.load_paths << "#{RAILS_ROOT}/app/widgets"

--

Pour Rails 3, voir réponses ci-dessous

27voto

Jacob Points 1861

Dans Rails 3, vous pouvez le régler dans config/application.rb, où cet exemple est fourni par défaut:

# Add additional load paths for your own custom dirs
# config.load_paths += %W( #{config.root}/extras )

8voto

gdakram Points 101

Une autre mise à jour pour rails 3 -- activesupport 3.0.0:

Au lieu de:
ActiveSupport::Dependencies.load_paths << "#{RAILS_ROOT}/app/widgets"

Vous pouvez avoir besoin pour ce faire:
ActiveSupport::Dependencies.autoload_paths << "#{RAILS_ROOT}/app/widgets"

1voto

Lewis Hoffman Points 11

J'ai trouvé que j'avais à faire cette après config bloc-- pas d'accès à l'objet de config plus.

Cela a fait l'affaire

ActiveSupport::Dependencies.load_paths << "#{RAILS_ROOT}/app/widgets"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X