2009-04-09 54 views
4

我有一个包含一个日期元素和3个时间元素的窗体。这是因为3个时间事件将在一个日期发生,我不希望用户必须输入该日期3次。Ruby Rails Time.change无法正常工作......我检查了文档!

在服务器端,我想结合一个日期和3次得到3个日期时间对象。我在想我可以这样做:

time_object.change(:day => date_object.day, :month => date_object.month, :year => date_object.year) 

但这没有奏效。下面是一个简单的测试,我写了我预期的那样工作:

def before_validation 
    logger.info("show_time = " + self.show_time.to_s) 
    self.show_time.change(:year => 2012) 
    self.show_time.change(:minute => 30) 
    logger.info("show_time = " + self.show_time.to_s) 
    end 

两个打印语句应该是不同的,但它们是相同的。有谁知道合并时间和日期对象的最佳方法吗?

回答

15

您需要指定它。如果你进入脚本/控制台:

>> t = Time.now 
=> Thu Apr 09 21:03:25 +1000 2009 
>> t.change(:year => 2012) 
=> Mon Apr 09 21:03:25 +1000 2012 
>> t 
=> Thu Apr 09 21:03:25 +1000 2009 
>> t = t.change(:year => 2012) 
=> Mon Apr 09 21:03:25 +1000 2012 
>> t 
=> Mon Apr 09 21:03:25 +1000 2012 

所以也许:

self.show_time = self.show_time.change(:year => 2012) 

可以为你工作。我不知道我对这个解决方案有什么看法,但它应该起作用。

+1

我试图改变一个时间对象的部分有一点运气分钟。看着时间的rdocs,找不到任何会导致我使用“更改”方法的东西。感谢这个答案,帮了我很多。 – Tass 2011-10-19 16:55:14

0

还要注意改变你使用:min代替:minute