2015-06-21 87 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