Si vous créez un nouveau modèle, vous pouvez le faire hériter des méthodes d'une classe existante.
Exemple (app/modèles/mykindofstring.rb):
class Mykindofstring < String
def all_caps_and_reverse
self.upcase.reverse
end
end
Ensuite, à partir du contrôleur:
@my_string = Mykindofstring.new('This is my string')
et enfin l'appeler de la vue:
<%= @my_string %>
affiche comme Ceci est ma chaîne, tandis que:
<%= @my_string.all_caps_and_reverse %>
affiche comme GNIRTS YM SI SIHT.
La classe hérite de la classe de chaînes, donc toutes les méthodes qui s'appliquent à une chaîne s'appliquent également à un objet mykindofstring. La méthode qui s'y trouve est juste un nouveau nom pour une combinaison de deux méthodes de chaînes existantes, mais vous pouvez le faire faire ce que vous voulez, comme une méthode pour convertir un temps en une chaîne formatée. Fondamentalement, il s'agit juste d'étendre une classe Ruby actuelle avec vos propres méthodes au lieu d'utiliser les fonctions/helpers.
Major Modifier
Sur la base de commentaires Ians à cette réponse et sa propre réponse à la question ci-dessus, j'ai joué un peu dans Rails et est venu avec l'ajout de ce à application_helper.rb:
module ApplicationHelper
String.class_eval do
def all_caps_and_reverse
self.upcase.reverse
end
end
end
maintenant, il suffit d'appeler la méthode sur une chaîne dans l'application:
@string = 'This is a string.'
@string.all_caps_and_reverse
.gnirts un si siht
Pourquoi est-ce important? Peut-être que le contexte aiderait ... – runako
Je trouve juste leur syntaxe existante agaçante et laide. Il serait aussi bien d'appeler des choses comme @ post.truncate dans mon modèle (pour la mise en cache, par exemple) –