Tôi chỉ cần trả lời câu hỏi này, đó là một bài tập Ruby thú vị.
Thêm phương thức vào một lớp có thể được thực hiện theo nhiều cách, nhưng một trong những cách gọn gàng nhất là sử dụng một số tính năng phản chiếu và đánh giá của Ruby.
Tạo tập tin này trong thư mục lib của bạn như 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
Bây giờ chỉ cần đưa nó vào bất kỳ mô hình mà cần nó
class CourseSection < ActiveRecord::Base
include DateMethods
end
Khi bao gồm, các mô-đun sẽ nhìn vào bất kỳ các cột ngày tháng và tạo các phương thức được định dạng_ cho bạn.
Tìm hiểu cách thức hoạt động của công cụ Ruby này. Đó là rất nhiều niềm vui.
Điều đó nói rằng, bạn phải tự hỏi mình nếu điều này là cần thiết. Tôi không nghĩ rằng nó là cá nhân, nhưng một lần nữa, nó là thú vị để viết.
-b-
Nguồn
2009-05-16 04:55:24
tại sao sử dụng thu thập và nhỏ gọn trên mảng thay vì chọn? –
Bạn nói đúng. .select sẽ phù hợp hơn ở đây. Tôi đã tìm thấy thời gian khi .collect.compact là nhanh hơn, ngay cả khi nó xuất hiện nó không nên, nhưng trong trường hợp này .select là một sự lựa chọn tốt hơn nhiều. Cảm ơn vì đã bắt được điều đó. Tôi đang tập trung làm những thứ khó nhọc và bỏ lỡ những thứ dễ dàng. –
+1 Thú vị và thú vị. Sẽ tốt hơn nếu bạn sửa câu trả lời (ở đây trên SO) để bao gồm các bình luận của Chris. –