Saya menduga Anda menggunakan date_select
helper untuk menghasilkan tag untuk tanggal tersebut. Cara lain yang bisa Anda lakukan adalah dengan menggunakan pilih formulir pembantu untuk bidang hari, bulan, tahun. Seperti ini (contoh yang saya gunakan adalah bidang tanggal create_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 %>
Dan dalam model, Anda memvalidasi tanggal:
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
Jika Anda mencari solusi plugin, saya akan memeriksa plugin validates_timeliness . Ini berfungsi seperti ini (dari halaman github):
class Person < ActiveRecord::Base
validates_date :date_of_birth, on_or_before: lambda { Date.current }
validates :date_of_birth, timeliness: { on_or_before: lambda { Date.current }, type: :date }
end
Daftar metode validasi yang tersedia adalah sebagai berikut:
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.