我们有一个表单创建预订,似乎只偶尔会将日期错误地返回。例如,如果您有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'根据用户的语言环境解析日期?).... –