Rails datetime_select Mongoid

时间:2015-06-21 11:43:35

标签: ruby-on-rails mongodb datetime

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可以将{"workou[date]" => "2015/06/20 10:10"}发送到Controller,但实际上,它已发送{"workout[date(1i)]" => "2015", workout[date(2i)] => "06", ... workout[date(5i)] => "10"}。最后,在Mongo锻炼系列中,它分别存储时间。

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

1 个答案:

答案 0 :(得分:0)

你问日期时间,但也许我的回答(使用日期类型)也可以引导你。我们来看看。

这个答案表明了Best way to store date/time in mongodb。也就是说,如果你能选择原生的JavaScript Date对象。

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

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

controller (e.g. new method)中你可以像往常一样使用Date对象,在我的情况下没有特殊处理。我猜对你来说是一样的。例如。 Date.currentDate.current+3.days。 请注意,create方法不会专门操作Date个对象。 Web视图表单中的参数按原样显示。

view我使用date_field帮助器。它是date类型的输入字段。请注意,目前Google Chrome支持日期字段类型,因此您会看到弹出日期选择器。其他浏览器还不支持该字段,因此它是一个简单的输入字段。我使用jQuery Datepicker以防浏览器不支持输入日期类型字段,例如

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

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