我们有一个创建预订的表单,似乎只是偶尔错误地将日期带回来。例如,如果您有01/12/17,它将被识别并保存为17/12/01。现在这并不是所有的预订。我当时认为这可能与这样一个事实有关,即它被作为字符串形式采用并在创建时变成了日期。
现场网站上的随机人员似乎发生了这种情况,但我的本地主机上还没有发现任何事情。
原因如下::string用于正在使用的datepicker。这不允许您输入从下拉日历中选择的日期。
我在这里缺少什么,或者是否有人对我可以尝试的事情有任何想法?任何帮助,将不胜感激。
处理日期的部分表单:
<%= 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
我还发现了这个pikaday代码:
new Pikaday({
field: document.getElementById('datepicker')
, format: 'D/M/YYYY'
, minDate: new Date()
});
答案 0 :(得分:0)
日期解析可能有问题。只需创建初始化程序 在config / initializers / date_time.rb
中Date::DATE_FORMATS[:default] = "%d/%m/%Y"
答案 1 :(得分: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 %>