【问题标题】:Rails datetime_select MongoidRails datetime_select Mongoid
【发布时间】:2015-06-21 11:43:34
【问题描述】:

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]" =&gt; "2015/06/20 10:10"} 发送到Controller,但实际上,它发送了{"workout[date(1i)]" =&gt; "2015", workout[date(2i)] =&gt; "06", ... workout[date(5i)] =&gt; "10"}。最后,在 Mongo 锻炼集合中,它单独存储了时间。

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

【问题讨论】:

    标签: ruby-on-rails mongodb datetime


    【解决方案1】:

    您要求日期时间,但也许我的回答(使用日期类型)也可以引导您。让我们看看。

    这个答案建议Best way to store date/time in mongodb。也就是说,如果可以的话,您应该选择原生 JavaScript Date 对象。

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

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

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

    在view 中,我使用date_field 助手。它是日期类型的输入字段。请注意,目前谷歌浏览器支持日期字段类型,因此您会看到一个日期选择器弹出。其他浏览器尚不支持该字段,因此对它们来说这是一个简单的输入字段。我使用jQuery Datepicker,以防浏览器不支持输入日期类型字段,例如

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

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

    【讨论】:

    • 感谢您的回答。它对我有很大帮助。我想我会选择 Javascript 解决方案!
    • 很高兴我能帮上忙。如果有帮助,请随时点赞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多