Ho dovuto solo rispondere, perché è un divertente esercizio Ruby.
L'aggiunta di metodi a una classe può essere eseguita in molti modi, ma uno dei modi più accurati consiste nell'utilizzare alcune delle funzioni di riflessione e valutazione di Ruby.
Creare questo file nella cartella lib come 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
Ora basta includere in tutti i modelli che ne hanno bisogno
class CourseSection < ActiveRecord::Base
include DateMethods
end
Quando incluso, il modulo esaminerà qualsiasi date colonne e genera i metodi formattati per te.
Scopri come funziona questa roba Ruby. È molto divertente.
Detto questo, è necessario chiedersi se è necessario. Non penso che sia personalmente, ma, di nuovo, è stato divertente scrivere.
-b-
fonte
2009-05-16 04:55:24
perché utilizzare raccogliere e compattare sulla matrice anziché selezionare? –
Hai ragione. .select sarebbe più appropriato qui. Ho trovato occasioni in cui .collect.compact è più veloce, anche quando sembra non dovrebbe essere, ma in questo caso .select è una scelta molto migliore. Grazie per averlo capito. Mi stavo concentrando sul fare le cose difficili e ho perso le cose facili. –
+1 Cose interessanti e divertenti. Sarebbe meglio se tu correggessi la risposta (qui su SO) per includere i commenti di Chris. –