保存DateTimePicker表单字段

时间:2018-05-16 07:07:37

标签: ruby-on-rails ruby date tempus-dominus-datetimepicker

我正在尝试在Ruby on Rails 5.2应用程序中使用Tempus Dominus Bootstrap 4,以便用户可以选择日期。这是代码:

应用/视图/活动/ _form.html.erb

<div class='form-group'>
  <%= f.label :starts_at, 'Start Date and Time', class: 'control-label' %>
  <div class="input-group date" id="datetimepicker1" data-target-input="nearest">
    <%= f.text_field(:starts_at, class: "form-control datetimepicker-input", data: {target:"#datetimepicker1"}) %>
    <div class="input-group-append" data-target="#datetimepicker1" data-toggle="datetimepicker">
      <div class="input-group-text"><i class="fas fa-calendar-plus"></i></div>
    </div>
  </div>
</div>

应用/资产/ Javascript角/ events.js

$(function () {
  $('#datetimepicker1').datetimepicker();
});

应用/控制器/ events_controller.rb

  def create
    @event = Event.new(event_params)
    @event.user = current_user
    if @event.save
      redirect_to @event, notice: 'Event was successfully created.' 
    else
      render :new 
    end
  end

我想先提交月份格式。当我选择2018年6月9日的日期并提交表格时,它会将其保存到数据库中,并将月份和日期反转:2018年9月6日。当我在提交表单后查看params时,格式是06/09/2018 6:00 PM,月份优先,但Ruby / Rails会在假设第一天将其转换为日期时间对象。

如何将Ruby转换为日期对象时告诉Ruby这个月是第一个?在保存之前,我可以在控制器中执行某些操作吗?

2 个答案:

答案 0 :(得分:2)

你可以告诉Ruby如何读取时间字符串:

DateTime.strptime('06/09/2018', '%m/%d/%Y')

您可以在此answer中看到详细信息。

<强>编辑:

此外,您可以将默认日期格式设置为there

将此添加到config / initializers / date_time.rb

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

答案 1 :(得分:1)

我发现你可以将日期格式更改为一个正确理解的Ruby,并且用户可以轻松读取。将JavaScript更改为:

$(document).on('turbolinks:load', function() {
  $('#datetimepicker1').datetimepicker(
    'format', 'MMMM D, YYYY h:mm A'
  );
});

这将在2018年6月9日下午6:30向用户显示日期。日期格式来自Moment.js http://momentjs.com/docs/#/displaying/format/,但已添加到Tempus Dominus的格式选项中。

作为旁注,要在Rails中使用tempus dominus boostrap 4,你还必须加载moment.js。要么调用cdn,要么添加momentjs-rails gem。如果后者然后在你的application.js文件中你需要它,如下所示:

# app/assets/javascripts/application.js
...
//= require moment
//= require tempusdominus-bootstrap-4.js