2009-04-09 3 views
4

Ich habe eine Form, die ein Datum-Element und 3 Zeitelemente enthält. Dies liegt daran, dass 3 Zeit-Ereignisse an einem Datum auftreten, und ich möchte nicht, dass der Benutzer dieses Datum dreimal eingeben muss.Ruby-Rails Time.change nicht funktioniert, wie ich erwarten würde ... Ich habe die Dokumente überprüft!

Auf der Serverseite, würde Ich mag die ein Datum mit dem 3-mal kombinieren 3 Datetime-Objekte zu erhalten. Ich dachte, ich könnte nur etwas tun wie:

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

aber das hat nicht funktioniert. Hier ist ein einfacher Test habe ich geschrieben, dass ich arbeiten würde erwarten:

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 

Die beiden Druck Aussagen anders sein sollte, aber sie sind die gleichen. Kennt jemand den besten Weg, ein Zeit- und ein Date-Objekt zusammenzuführen?

Antwort

15

Sie müssen es zuweisen. Wenn Sie in Skript/Konsole gehen:

>> 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 

so vielleicht:

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

könnte für Sie arbeiten. Ich weiß nicht, was ich von dieser Lösung halte, aber es sollte funktionieren.

+1

Ich habe versucht, Teile eines Time-Objekt mit etwas Glück zu ändern. Sah sich die rdocs für Time an und konnte nichts finden, was mich dazu bringen würde, die "change" -Methode zu verwenden. Danke für diese Antwort, hat mir sehr geholfen. – Tass

+0

Das ist jemand aus dem Jahr 2012 ... ähm ... Hi, hast du angerufen? – wrongusername

0

Beachten Sie auch, dass die Minute, die Sie :min verwenden zu ändern statt :minute