web-dev-qa-db-fra.com

Dans Ruby on Rails, pour étendre la classe String, où faut-il mettre le code?

Si on Ruby on Rails, je dois ajouter une méthode appelée

class String
  def capitalize_first
    # ...
  end
end

et se demandent où le fichier doit aller? (quel répertoire et nom de fichier, et un code d'initialisation est-il nécessaire?) Ceci est pour un projet Rails 3.0.6.

74

J'ajoute toujours un core_ext dans mon répertoire lib.

Créez un initialiseur pour charger les extensions personnalisées (par exemple: config/initializers/core_exts.rb). Et ajoutez-y la ligne suivante:

Dir[File.join(Rails.root, "lib", "core_ext", "*.rb")].each {|l| require l }

et avoir votre extension comme:

lib/core_ext/string.rb

class String
  def capitalize_first
    # ...
  end
end
129
Mike Lewis

Vous pouvez le faire dans config/initializers/string.rb

class String
  def capitalize_first
    # ...
  end
end

devrait être tout ce dont vous avez besoin (en plus d'un redémarrage de l'application).

64
njorden

Les directives de Rails 3.1 est la voie à suivre:

http://guides.rubyonrails.org/plugins.html#extending-core-classes

Si vous suivez la convention par défaut, vous n'aurez pas besoin de jouer avec une configuration d'initialisation.

5
Hopstream