Dans Rails 5.1 J'ai un menu déroulant créé avec assistant de time_select d'une colonne de table de type de données « temps »:Comment interdire une option particulière d'une liste déroulante pour envoyer une valeur?
<div class="col-md-12">
<%= form_for(Sleep.new) do |f| %>
<%= f.time_select :hours, {minute_step: 5, prompt: true, order: [:hour]} %>
<%= f.submit "Submit" %>
<% end %>
</div>
L'invite définit le menu déroulant à la chaîne « Heures » par défaut. En html, cette ligne n'a pas de valeur: l'option
<select id="sleep_hours_4i" name="sleep[hours(4i)]">
<option value="">Hour</option>
<option value="00">00</option>
Cependant, lorsqu'un utilisateur ne choisit rien dans le menu déroulant et le soumet à la valeur par défaut « Heures », le formulaire envoie la valeur au db:
0001-01-01 00:00:00
Puisque la valeur des « Heures » est non nul, ma validation (ce qui devrait donner un avis utilisateur si rien a été sélectionné dans le menu déroulant) ne fonctionne pas. Comment puis-je toujours avoir "Heures" par défaut, mais définir la valeur de cette option à zéro (interdit d'envoyer des valeurs à la DB sur présentation de cette option) et être capable de donner à l'utilisateur un avis comme "Choisissez une heure!" dans ce cas?
Avez-vous besoin d'avoir une invite? Sinon, vous pouvez simplement l'éteindre et ainsi vous n'avez pas ce problème. – Iceman
Vous pouvez également valider avec une valeur vide, c'est une autre possibilité. Quelque chose comme 'validates: hour, presence: true, allow_blank: false' – Iceman
La suppression de l'invite rend juste une heure aléatoire de la liste par défaut. – Evanto