48 votes

Dans Rails, comment ajouter une nouvelle méthode à la classe String?

Je souhaite créer un index pour différents objets dans mon projet Rails et souhaite ajouter une méthode 'count_occurences' que je peux appeler sur des objets String.

J'ai vu que je pouvais faire quelque chose comme

 class String
  def self.count_occurences
    do_something_here
  end
end
 

Quelle est la manière exacte de définir cette méthode et où placer le code dans mon projet Rails?

Merci

93voto

Ryan Bigg Points 64561

Vous pouvez définir une nouvelle classe dans votre application lors de l' lib/ext/string.rb et de mettre ce contenu dans:

class String
  def to_magic
    "magic"
  end
end

Pour charger cette classe, vous devez l'exiger dans votre config/application.rb le fichier ou dans un initialiseur. Si vous aviez beaucoup de ces extensions, un initialiseur, c'est mieux! La façon de charger, c'est simple:

require 'ext/string'

L' to_magic méthode sera ensuite disponible sur les instances de l' String classe à l'intérieur de votre application ou votre console, c'est à dire:

>> "not magic".to_magic
=> "magic"

Pas de plugins nécessaires.

12voto

Je sais que c'est un vieux thread, mais il ne semble pas comme si la solution retenue œuvres dans les Rails 4+ (au moins pas pour moi). Mettre l'extension rb fichier de config/initializers travaillé.

Alternativement, vous pouvez ajouter /lib pour les Rails de l'autochargeur (dans config/application.rb, dans la classe d'Application:

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

require 'ext/string'

Voir ceci: http://brettu.com/rails-ruby-tips-203-load-lib-files-in-rails-4/

4voto

Ireneusz Skrobis Points 1408

Lorsque vous souhaitez étendre certaines classe de base alors que vous voulez généralement à créer un plugin (il est très utile lorsque vous besoin de ce code dans une autre application). Ici vous pouvez trouver un guide sur la façon de créer un plugin http://guides.rubyonrails.org/plugins.html et le point #3 vous montrer comment étendre la classe String: http://guides.rubyonrails.org/plugins.html#extending-core-classes

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