我們有一個表單創建預訂,似乎只偶爾會將日期錯誤地返回。例如,如果您有01/12/17,它將被識別並保存爲17/12/01。現在這不是所有的預訂。我認爲這可能是因爲它是以字符串的形式呈現,並在創建時變成日期。日期不正確地只保存到數據庫
它似乎發生在現場的隨機人,但尚未看到我的本地主機上發生任何事情。
原因如下:字符串是用於日期選擇器的。哪些不允許您輸入從下拉日曆中選擇的日期。
有沒有我在這裏失蹤的東西,或者如果有人有任何想法我可以嘗試?任何幫助,將不勝感激。
<%= 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 %>
下面是創建方法:與日交易方式的
部分
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
在數據庫日期:
create_table "bookings", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.date "date"
...
end
我也發現了這個皮卡代碼:
new Pikaday({
field: document.getElementById('datepicker')
, format: 'D/M/YYYY'
, minDate: new Date()
});
爲什麼您的字段爲'date'輸入'string'?這顯然是問題的根源。 –
你的日期格式不明確。嘗試將日期作爲'2017-12-01'(ISO 8601)傳遞。您的日期選擇器可能允許您設置格式。 – Stefan
我不確切地知道是什麼導致了強制問題 - 可能是用戶錯誤(例如輸入日期,格式爲mm/dd/yyyy)或瀏覽器配置(如果使用日期選擇器,也許瀏覽器的區域設置選擇格式) ,或者可能是你後端的東西(是'booking_params'根據用戶的語言環境解析日期?).... –