Solo tuve que responder a esto, porque es un ejercicio divertido de Ruby.
Agregar métodos a una clase se puede hacer de muchas maneras, pero una de las mejores formas es usar algunas de las funciones de reflexión y evaluación de Ruby.
Cree este archivo en la carpeta lib 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
Ahora basta con incluir en cualquiera de los modelos que lo necesitan
class CourseSection < ActiveRecord::Base
include DateMethods
end
Cuando se incluye, el módulo se verá en cualquier Columnas de fecha y genere los métodos formateados por usted.
Aprende cómo funciona este Ruby. Es muy divertido.
Dicho esto, debe preguntarse si es necesario. No creo que sea personal, pero de nuevo, fue divertido escribir.
-b-
¿por qué utilizar recopilar y compactar en la matriz en lugar de seleccionar? –
Tienes razón. .select sería más apropiado aquí. He encontrado momentos en los que .collect.compact es más rápido, incluso cuando parece que no debería serlo, pero en este caso .select es una opción mucho mejor. Gracias por atrapar eso. Me estaba enfocando en hacer las cosas difíciles y me perdí las cosas fáciles. –
+1 cosas interesantes y divertidas. Sería mejor si corrigieras la respuesta (aquí en SO) para incluir los comentarios de Chris. –