2017-10-19 66 views
0

我們有一個表單創建預訂,似乎只偶爾會將日期錯誤地返回。例如,如果您有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() 
}); 
+0

爲什麼您的字段爲'date'輸入'string'?這顯然是問題的根源。 –

+0

你的日期格式不明確。嘗試將日期作爲'2017-12-01'(ISO 8601)傳遞。您的日期選擇器可能允許您設置格式。 – Stefan

+0

我不確切地知道是什麼導致了強制問題 - 可能是用戶錯誤(例如輸入日期,格式爲mm/dd/yyyy)或瀏覽器配置(如果使用日期選擇器,也許瀏覽器的區域設置選擇格式) ,或者可能是你後端的東西(是'booking_params'根據用戶的語言環境解析日期?).... –

回答

0

日期解析可能issue.just創建配置/初始化一個初始化 /date_time.rb

Date::DATE_FORMATS[:default] = "%d/%m/%Y" 
0

的用戶大概在他們表達不同日期不同的國家。在美國,我們做MM-DD-YYYY,但在歐洲的大部分地區,他們都會做DD-MM-YYYY,但我並不直接知道,但我敢打賭,有些人會做其他事情。

<%= simple_form_for [:cms, venue, booking] do |f| %> 
    ... 
    <fieldset class="form-group"> 
     <%=f.input :date, label: "Date of booking (DD-MM-YYYY)",as: :string, wrapper: :pikaday %> 
    </fieldset> 
<% end %> 

最簡單的解決辦法是在括號中指定的格式,你想要它是(DD-MM-YYYY),你可以做的另一件事是假設基於用戶的本地化的格式。

<%= simple_form_for [:cms, venue, booking] do |f| %> 
    ... 
    <fieldset class="form-group"> 
     <%=f.input :date, label: "Date of booking",as: :date, wrapper: :pikaday %> 
    </fieldset> 
<% end %> 
+0

將它作爲::date打破我們使用的datepicker。 – Georgeheap

+0

使用不同的日期選擇器,大聲笑 –

+0

*「在美國,我們做DD-MM-YYYY,但是在歐洲大部分地區,他們都是MM-DD-YYYY」* ......這是相反的方式! –