Po prostu musiałem odpowiedzieć na to pytanie, ponieważ jest to zabawne ćwiczenie Ruby.
Dodawanie metod do klasy można zrobić na wiele sposobów, ale jednym z najmilszych sposobów jest użycie niektórych funkcji refleksji i oceny Rubiego.
Utwórz ten plik w folderze, 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
Teraz wystarczy umieścić go w dowolnych modeli, które potrzebują go
class CourseSection < ActiveRecord::Base
include DateMethods
end
Gdy włączone, moduł będzie patrzeć na dowolny kolumn daty i wygeneruj dla Ciebie metody sformatowane.
Dowiedz się, jak działa ten materiał Ruby. To świetna zabawa.
To powiedziawszy, musisz zadać sobie pytanie, czy jest to konieczne. Nie sądzę, żeby to było osobiście, ale znowu było fajnie pisać.
-b-
dlaczego warto używać funkcji zbierania i kompaktowania na macierzy, zamiast wybierać? –
Masz rację. .select byłoby bardziej odpowiednie tutaj. Znalazłem czasy, kiedy .collect.compact jest szybsze, nawet jeśli wydaje się, że nie powinno, ale w tym przypadku .select jest znacznie lepszym wyborem. Dzięki za złapanie tego. Skupiałem się na robieniu trudnych rzeczy i przegapiłem proste rzeczy. –
+1 Ciekawe i zabawne rzeczy. Byłoby lepiej, gdybyś poprawił odpowiedź (tutaj na SO), aby uwzględnić komentarze Chrisa. –