2017-10-19 31 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”* ......这是相反的方式! –