En Ruby on Rails, pour étendre la classe String, où le code devrait-il être mis en?
Si sur Ruby on Rails, j'ai besoin d'ajouter une méthode appelée
class String
def capitalize_first
# ...
end
end
et me demande d'où devrait le fichier aller? (le répertoire et le nom, et est tout initialiser le code nécessaire?) C'est pour Rails 3.0.6 projet.
Vous devez vous connecter pour publier un commentaire.
Je toujours ajouter un
core_ext
répertoire dans monlib
dir.Créer un initialiseur pour le chargement des extensions personnalisées (par exemple:
config/initializers/core_exts.rb
). Et ajouter la ligne suivante:et votre extension comme:
lib/core_ext/string.rb
String
de classe ou tout simplement utiliser une méthode d'assistance en vue? Mais alors, si c'est une aide, alors il est aussi gênant pour le faire fonctionner dans le contrôleur (ou modèle), et il ne peut pas être enchaîné commes.capitalize_first.truncate(30)
class Application < Rails::Application ... config.autoload_paths += Dir[File.join(Rails.root, "lib", "core_ext", "*.rb")].each {|l| require l } ...
lib/core_ext/string.rb
, n'oubliez pas d'inclurerequire 'core_ext/string'
en haut du fichier dans lequel vous l'utilisez.app
pour le chemin d'accès du fichier:Dir[File.join(Rails.root, "app", "lib", "core_ext", "*.rb")].each {|l| require l }
lib
répertoire ne doit pas être à l'intérieur de laapp
répertoire.config.autoload_paths
), ce qui pourrait causer quelques problèmes.Vous pourriez le faire dans config/initializers/chaîne.rb
tout ce qu'il faut (en plus d'une application redémarrez-le).
Les lignes directrices dans les Rails 3.1 est le chemin à parcourir:
http://guides.rubyonrails.org/plugins.html#extending-core-classes
Si vous suivez le défaut de convention, vous n'aurez pas besoin de jouer avec un initialiseur config.