Rails datetime_select Mongoid



Rails~4.2.1

Mongoid~4.0.2

在_form.html.erb中,代码如下:

<%= form_for @workout %>
  <%= f.label :date%>
  <%= f.datetime_select :date>
  <%= f.submit %>
<% end %>

在Workout.rb中,代码如下:

class Workout
  include Mongoid::Document
  field :date, type: DateTime
end

我天真地以为The View可以向Controller发送{"workou[date]" => "2015/06/20 10:10"},但实际上,它发送了{"workout[date(1i)]" => "2015", workout[date(2i)] => "06", ... workout[date(5i)] => "10"}。最后,在Mongo训练集合中,它单独存储了时间。

我希望MongoDB将它们存储在一个字段中,键入DateTime。我怎样才能做到这一点?

你问Datetime,但也许我的答案(使用Date类型)也可以引导你。让我们看看

这个答案提出了在mongodb中存储日期/时间的最佳方式。如果可以的话,您应该选择本机JavaScriptDate对象。

我解决问题的方法(使用Date对象)如下。

我在模型中使用Date字段类型。例如,事件模型有两种日期类型,from_dateend_date

在控制器(例如new方法)中,您可以像往常一样使用Date对象,在我的情况下没有特殊处理。我想对你来说是一样的。例如Date.currentDate.current+3.days。请注意,create方法并没有专门操作Date对象。web视图表单中的参数取原样。

在视图中,我使用date_field辅助对象。它是日期类型的输入字段。请注意,目前Google Chrome支持日期字段类型,因此您将看到弹出的日期选择器。其他浏览器还不支持该字段,所以它对他们来说是一个简单的输入字段。我使用jQuery日期选择器,以防浏览器不支持输入日期类型字段,例如

$(document).ready(function(){
    ...
    if ( $('[type="date"]').prop('type') !== 'date' ) {
        $('input[type="date"]').datepicker({dateFormat: "yy-mm-dd"});
    }
    ...
});

所以在你的情况下,也许你可以做一些类似的事情解决方案可能没有datetime_field辅助方法,但是简单的输入字段就可以了,您可以使用JS来确保您保存对应字段的本地JS Date/Datetime对象。

相关内容

  • 没有找到相关文章

最新更新