Ich musste nur antworten, denn es ist ein Spaß Ruby Übung.
Das Hinzufügen von Methoden zu einer Klasse kann auf viele Arten erfolgen, aber eine der besten Möglichkeiten besteht darin, einige der Reflektions- und Bewertungsfunktionen von Ruby zu verwenden.
Erstellen Sie diese Datei in Ihrem Ordner lib als 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
Jetzt sind es nur in alle Modelle, die es brauchen
class CourseSection < ActiveRecord::Base
include DateMethods
end
Wenn enthalten, das Modul auf jeder aussehen Datumsspalten und generiere die formated_ Methoden für dich.
Erfahren Sie, wie dieses Ruby Zeug funktioniert. Es macht viel Spass.
Das heißt, Sie müssen sich fragen, ob dies notwendig ist. Ich glaube nicht, dass es persönlich ist, aber es hat Spaß gemacht zu schreiben.
-b-
Warum sammeln und komprimieren auf dem Array lieber als wählen? –
Sie haben Recht. .select wäre hier angemessener. Ich habe Zeiten gefunden, in denen .collect.compact schneller ist, auch wenn es scheint, dass es nicht sein sollte, aber in diesem Fall ist .select eine viel bessere Wahl. Danke, dass du das verstanden hast. Ich konzentrierte mich auf die harten Sachen und verpasste die einfachen Sachen. –
+1 Interessante und lustige Sachen. Wäre besser, wenn Sie die Antwort (hier auf SO) korrigieren würden, um Chris 'Kommentare aufzunehmen. –