2015-06-21 79 views
0

的Rails 4.2.1〜Rails的datetime_select Mongoid

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锻炼收集中,它分开存储时间。

我想蒙戈DB将它们存储在一个字段,类型为DateTime。我怎样才能做到这一点?

回答

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辅助方法,但可以使用简单的输入字段,并且您可以使用JS来确保您为相应的字段保存了一个本地JS Date/Datetime对象 。

+1

感谢您的回答。它帮助我很多。我想我会用Javascript解决方案! – mCY

+0

我很高兴能够提供帮助。如果有帮助,请随时注册。 – Elyasin