Rails:表单和数据库中的日期格式

时间:2016-04-25 21:38:54

标签: ruby-on-rails ruby activerecord date-format

我有一个表单,其中有一个日期选择器,显示格式为的日期:

'%m/%d/%Y'

问题是当我提交表单时,此格式不是有效日期,因此它不会在INSERT INTO / UPDATE上发送到数据库。

尽管如此,如果我以这种格式提交日期,它仍然有效:

'%Y-%d-%m'

我已经看到在将对象保存到数据库之前我可以执行类似的操作:

my_object.due_date = params[:content_date].to_date.strftime("%Y-%d-%m")

但由于我有多个日期字段和多个带日期字段的模型,我希望避免在任何地方执行 strftime()

你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我正在使用gem 'momentjs-rails',因为日期时间选择器。

模型

#deadline is saved in the db
#this is the getter-setter for deadline_string
def deadline_string
  deadline.to_datetime.iso8601
end

def deadline_string=(deadline_str)
  self.deadline = deadline_str
end

形式

#new form
<div class="field form-group">
  <%= f.label :deadline %>
  <%= f.text_field :deadline, class: "form-control new-task-deadline" %>
</div>

#edit form
<div class="field form-group">
  <%= f.label :deadline %>
  <%= f.text_field :deadline_string, class: "form-control edit-task-deadline" %>
</div>

保存到db时的js

$('.new-task-submit').on('click', function (e){
  e.preventDefault();
  var localMoment = moment($('.new-task-deadline').val());
  $('.new-task-deadline').val(localMoment.toISOString());
  $('#newtask').submit();
});

$(document).on('click', '.edit-task-submit', function (e){
  e.preventDefault();
  var deadlineField = $('.edit-task-deadline');
  var localMoment = moment(deadlineField.val());
  var railsDate = localMoment.toISOString();
  deadlineField.val(railsDate);
  $(".task-update-form").submit();
});

js在get请求中显示不错的数据

//setting time and datetimepicker when opening edit task modal
$(document).on('shown.bs.modal', '#update-task-modal', function (e) {
  var deadlineField =  $('.edit-task-deadline');
  var deadlineValue = deadlineField.attr('value');
  var momentDeadline = moment(deadlineValue).format('MM/DD/YYYY hh:mm A');
  deadlineField.val(momentDeadline);
  deadlineField.datetimepicker({
    sideBySide: true,
    format: 'MM/DD/YYYY hh:mm A',
    stepping: 15,
    widgetPositioning: { vertical: 'bottom' }
  });
});