仅随机将日期错误地保存到数据库

时间:2017-10-19 12:50:49

标签: ruby-on-rails ruby

我们有一个创建预订的表单,似乎只是偶尔错误地将日期带回来。例如,如果您有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()
});

2 个答案:

答案 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 %>