2012-02-11 21 views
0

我正在學習使用Rails和Mongo的Backbone js。這裏是我的模型:使用Backbone,Rails 3.1和MongoMapper的日期時間

class Task 
    include MongoMapper::Document 
    include ActionView::Helpers 

    many :time_entries 

    key :description, String 
    key :duration, Integer, :default => 0 
    timestamps! 
end 

class TimeEntry 
    include MongoMapper::EmbeddedDocument 

    belongs_to :task 

    key :startDate, Date 
    key :endDate, Date 
end 

出於某種原因,日期時間,我送爲的startDate和結束日期在更新蒙戈當次下降,但我可以看到骨幹正在推動他們通過正確:

Started PUT "/tasks/4f357ece8af1b04a54000ef2" for 127.0.0.1 at 2012-02-11 12:25:19 -0500 
Processing by TasksController#update as JSON 
Parameters: {"description"=>"Task with time entry", "time_entries"=>[{"startDate"=>"2012-02-11T17:25:19.529Z"}], "created_at"=>"2012-02-10T20:32:14Z", "duration"=>0, "id"=>"4f357ece8af1b04a54000ef2", "updated_at"=>"2012-02-11T17:25:00Z", "task"=>{"description"=>"Task with time entry", "time_entries"=>[{"startDate"=>"2012-02-11T17:25:19.529Z"}], "created_at"=>"2012-02-10T20:32:14Z", "duration"=>0, "id"=>"4f357ece8af1b04a54000ef2", "updated_at"=>"2012-02-11T17:25:00Z", "action"=>"update", "controller"=>"tasks"}} 
MONGODB timetrack_development['tasks'].find({:_id=>BSON::ObjectId('4f357ece8af1b04a54000ef2')}).limit(-1) 
MONGODB timetrack_development['tasks'].update({:_id=>BSON::ObjectId('4f357ece8af1b04a54000ef2')}, {"_id"=>BSON::ObjectId('4f357ece8af1b04a54000ef2'), "description"=>"Task with time entry", "duration"=>0, "created_at"=>2012-02-10 20:32:14 UTC, "updated_at"=>2012-02-11 17:25:19 UTC, "time_entries"=>[{"_id"=>BSON::ObjectId('4f36a47f8af1b04a54000ff9'), "task_id"=>nil, "startDate"=>2012-02-11 00:00:00 UTC}]}) 

注意Rails是讓我的startDate和結束日期PARAMS正確作爲PARAMS ISO8601格式的字符串,但更新集計時裝置00的呼叫: 00:00。我究竟做錯了什麼?

回答

2

由於您使用的是Date,所以您的意思是Time,您正在失去時間。 MongoMapper types documentation幾乎說「讀源」,所以我們會這樣做;如果你看一下extensions/time.rb你會發現它與時間的實例,但如果你看看extensions/date.rb你會發現它與Date實例:

def to_mongo(value) 
    #...  
    date = value.is_a?(::Date) || value.is_a?(::Time) ? value : ::Date.parse(value.to_s) 
    ::Time.utc(date.year, date.month, date.day) 
    #... 
end 

def from_mongo(value) 
    value.to_date if value.present? 
end 

因此,任何時間的日上startDateendDate在進出MongoDB的路上消失。

嘗試定義你這樣的TimeEntry:

class TimeEntry 
    include MongoMapper::EmbeddedDocument 

    belongs_to :task 

    key :startDate, Time 
    key :endDate, Time 
end 
相關問題