0
votes

Validation de confirmation de la date de la naissance

Je veux vérifier mon utilisateur pour leur inscription. J'ai déjà la date de naissance stockée dans ma base de données depuis leur envoi d'un client API. Je souhaite que l'utilisateur confirme sa date de naissance, donc je configurais une validation de confirmation des rails. J'ai dans mes params date_of_birth_confirmation code> et c'est ce que j'utilise dans mon formulaire.

  def verification_params
    params[:user][:date_of_birth_confirmation] = format_date_of_birth_confirmation
    params.require(:user).permit(
      :date_of_birth_confirmation
    )
  end

  # Format date_of_birth_confirmation to be a date so the comparison can be made with date_of_birth
  def format_date_of_birth_confirmation
    year = params[:user].delete("date_of_birth_confirmation(1i)")
    month = params[:user].delete("date_of_birth_confirmation(2i)")
    day = params[:user].delete("date_of_birth_confirmation(3i)")

    return nil unless year.present? && month.present? && day.present?

    "#{year}-#{month}-#{day}".to_date
  end


0 commentaires

3 Réponses :


0
votes

Utilisez validations .

Premier, validez ce date_of_birth est une date, pas vide et raisonnable. J'utilise validated_timuness . xxx

puis faire un Modèle de formulaire pour valider et traiter l'entrée de formulaire. En incluant ActiveModel :: Modèle Nous obtenons une classe qui peut faire beaucoup de mêmes choses qu'un enregistrement, mais il n'y a pas de table. xxx

alors vous pouvez utiliser la date de la date de votre contrôleur pour valider le formulaire et transmettre la date à l'utilisateur. xxx

et utilisez @birth_date et @birth_date_confirmation dans votre vue comme ses propres formulaires. xxx

Ceci vous donne également un modèle que vous pouvez Test de l'appareil facile à effectuer vos tests de contrôleur plus simples.


3 commentaires

Cette réponse ne semble pas valider la confirmation qui est ce que j'essaie de faire. Je ne vois pas où dans vos exemples inclus, la validation de confirmation exécuterait ou comment elle fonctionnerait contre le modèle de date de la date. Je pense que j'aurais besoin d'une autre méthode d'instance ou de validation à courir. À ce stade, j'estime que c'est beaucoup de code à écrire pour peu d'avantages en termes de lisibilité. La date de naissance n'est pas le seul param que j'utilise pour confirmer l'enregistrement de mon utilisateur. J'ai l'impression de ce que je suis peut-être la meilleure solution pour cette situation.


@Gabriel Oic. Utilisez deux datforms, un pour le DOB et un pour la confirmation. Ajouter Confirmation: true à l'utilisateur date_of_birth validation.


@Gabriel je peux être un peu sur ma tête.



1
votes

La réponse courte est non, il n'y a pas de «rails-y» plus directe que ce que vous faites depuis que la date_select renvoie toujours les valeurs choisies brutes en tant que chaînes indépendantes.


0 commentaires

0
votes

J'ai fini par changer la logique du contrôleur pour mettre la logique de formater la mise en forme de la date_of_birth_confirmation dans le modèle qui est probablement l'endroit où il est mieux adapté.

   # User.rb
   before_validation :format_date_of_birth_confirmation

   def format_date_of_birth_confirmation
    return if date_of_birth_confirmation.blank?
    return if date_of_birth_confirmation.is_a?(Date)

    year = date_of_birth_confirmation[1]
    month = date_of_birth_confirmation[2]
    day = date_of_birth_confirmation[3]

    return unless year && month && day

    assign_attributes(date_of_birth_confirmation: "#{year}-#{month}-#{day}".to_date)
  end


0 commentaires