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
3 Réponses :
Utilisez validations .
Premier, validez ce 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. p> alors vous pouvez utiliser la date de la date de votre contrôleur pour valider le formulaire et transmettre la date à l'utilisateur. P > et utilisez @birth_date et @birth_date_confirmation dans votre vue comme ses propres formulaires. p> Ceci vous donne également un modèle que vous pouvez Test de l'appareil facile à effectuer vos tests de contrôleur plus simples. P> P> date_of_birth code > est une date, pas vide et raisonnable. J'utilise validated_timuness . P>
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 code> à l'utilisateur
date_of_birth code> validation.
@Gabriel je peux être un peu sur ma tête.
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. P>
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