Nous avons créé un formulaire de réservation qui semble indiquer la date de façon incorrecte. Par exemple si vous aviez le 01/12/17, il est reconnu et enregistré au 17/12/01. Maintenant, ce n'est pas toutes les réservations juste quelques-unes. Je pensais que cela pourrait avoir à voir avec le fait qu'il est pris dans la forme comme une chaîne et transformé en une date quand il est créé.Date d'enregistrement incorrect dans la base de données uniquement de manière aléatoire
Il semble que cela arrive à des gens au hasard sur le site en direct, mais je n'ai encore rien vu sur mon localhost.
La raison pour laquelle il s'agit de:: string est pour le datepicker utilisé. Ce qui ne vous permet pas de saisir les dates que vous choisissez dans un calendrier déroulant.
Y at-il quelque chose qui me manque ici ou si quelqu'un a des idées de choses que je peux essayer? Toute aide qui serait grandement appréciée.
partie du formulaire qui traite de la date:
<%= simple_form_for [:cms, venue, booking] do |f| %>
...
<fieldset class="form-group">
<%=f.input :date, label: "Date of booking",as: :string, wrapper: :pikaday %>
</fieldset>
<% end %>
Voici la méthode create:
def create
@booking = Booking.new(booking_params)
if booking_params[:reference_1] == '' || booking_params[:reference_2] == ''
flash[:error] = 'Must fill in both parts of booking reference'
return render :new
else
@booking.reference_number(booking_params)
end
if @booking.save
flash[:notice] = 'Booking created and e-mail to organiser sent!'
redirect_to cms_venue_path(venue)
else
flash[:error] = 'Please review the errors and try again'
render :new
end
end
En base de données Date:
create_table "bookings", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.date "date"
...
end
Je trouve aussi cette Code pikaday:
new Pikaday({
field: document.getElementById('datepicker')
, format: 'D/M/YYYY'
, minDate: new Date()
});
Pourquoi votre champ est-il entré pour 'date' une' chaîne'? C'est évidemment la source du problème. –
Votre format de date est ambiguë. Essayez de passer la date comme '2017-12-01' (ISO 8601). Votre sélecteur de date vous permet probablement de définir le format. – Stefan
Je ne sais pas exactement ce qui cause le problème de coercition - il peut s'agir d'une erreur utilisateur (par exemple, entrer des dates au format mm/jj/aaaa) ou de la configuration du navigateur (si vous utilisez une datepicker) , ou peut-être quelque chose dans votre backend (est-ce que 'booking_params' analyse la date en fonction des paramètres régionaux de l'utilisateur?) .... –