Je viens de devoir répondre à cette question, car c'est un amusant exercice Ruby.
L'ajout de méthodes à une classe peut se faire de plusieurs façons, mais l'une des façons les plus simples consiste à utiliser certaines des fonctions de réflexion et d'évaluation de Ruby.
Créer ce fichier dans votre dossier lib comme lib/date_methods.rb
module DateMethods
def self.included(klass)
# get all dates
# Loop through the class's column names
# then determine if each column is of the :date type.
fields = klass.column_names.select do |k|
klass.columns_hash[k].type == :date
end
# for each of the fields we'll use class_eval to
# define the methods.
fields.each do |field|
klass.class_eval <<-EOF
def formatted_#{field}
#{field} ? #{field}.to_s(:date) : nil
end
EOF
end
end
end
Maintenant, il suffit d'inclure dans tous les modèles qui en ont besoin
class CourseSection < ActiveRecord::Base
include DateMethods
end
Lorsque inclus, le module cherchera à tout colonnes de date et générez les méthodes formatted_ pour vous.
Apprenez comment fonctionne cette substance Ruby. C'est très amusant.
Cela dit, vous devez vous demander si cela est nécessaire. Je ne pense pas que ce soit personnellement, mais encore une fois, c'était amusant d'écrire.
-b-
pourquoi utiliser collecter et compacter sur la matrice plutôt que de sélectionner? –
Vous avez raison. .select serait plus approprié ici. J'ai trouvé des moments où .collect.compact est plus rapide, même quand il semble que ce ne devrait pas l'être, mais dans ce cas, .select est un bien meilleur choix. Merci d'avoir attrapé ça. Je me concentrais sur faire les choses difficiles et raté les choses faciles. –
+1 Des trucs intéressants et amusants. Ce serait mieux si vous corrigiez la réponse (ici sur SO) pour inclure les commentaires de Chris. –