2012-02-11 18 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 
相关问题