Je devine que vous êtes à l'aide de l' date_select
helper pour générer les balises pour la date. Une autre façon de le faire est d'utiliser sélectionnez le formulaire d'assistance pour les jour, mois, année). Comme ceci (exemple que j'ai utilisé est le created_at champ date):
<%= 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 %>
Et dans le modèle, vous validez la date:
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
Si vous êtes à la recherche d'un plugin solution, j'avais la caisse de la validates_timeliness plugin. Il fonctionne comme ceci (à partir de la page 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
La liste des méthodes de validation sont disponibles comme suit:
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.