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_date
和end_date
。
在控制器(例如new
方法)中,您可以像往常一样使用Date
对象,在我的情况下没有特殊处理。我想对你来说是一样的。例如Date.current
或Date.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对象。