Tôi đoán bạn đang sử dụng trình date_select
trợ giúp để tạo các thẻ cho ngày tháng. Một cách khác mà bạn có thể làm là sử dụng trình trợ giúp biểu mẫu chọn lọc cho các trường ngày, tháng, năm. Như thế này (ví dụ tôi đã sử dụng là trường ngày tạo_at):
<%= f.select :month, (1..12).to_a, selected: @user.created_at.month %>
<%= f.select :day, (1..31).to_a, selected: @user.created_at.day %>
<%= f.select :year, ((Time.now.year - 20)..Time.now.year).to_a, selected: @user.created_at.year %>
Và trong mô hình, bạn xác thực ngày:
attr_accessor :month, :day, :year
validate :validate_created_at
private
def convert_created_at
begin
self.created_at = Date.civil(self.year.to_i, self.month.to_i, self.day.to_i)
rescue ArgumentError
false
end
end
def validate_created_at
errors.add("Created at date", "is invalid.") unless convert_created_at
end
Nếu bạn đang tìm kiếm một giải pháp plugin, tôi sẽ kiểm tra plugin validates_timeliness . Nó hoạt động như thế này (từ trang github):
class Person < ActiveRecord::Base
validates_date :date_of_birth, on_or_before: lambda { Date.current }
# or
validates :date_of_birth, timeliness: { on_or_before: lambda { Date.current }, type: :date }
end
Danh sách các phương pháp xác thực có sẵn như sau:
validates_date - validate value as date
validates_time - validate value as time only i.e. '12:20pm'
validates_datetime - validate value as a full date and time
validates - use the :timeliness key and set the type in the hash.