2009-04-09 11 views
4

J'ai un formulaire qui contient un élément date et 3 éléments temps. Ceci est dû au fait que trois événements temporels se produisent à une date donnée, et je ne souhaite pas que l'utilisateur doive entrer cette date trois fois. Du côté serveur, je voudrais combiner la date avec les 3 fois pour obtenir 3 objets datetime. Je pensais que je pouvais juste faire quelque chose comme:Ruby Rails Time.change ne fonctionne pas comme je m'attendrais ... J'ai vérifié les docs!

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

mais cela n'a pas fonctionné. Voici un test simple, je l'ai écrit que j'attendre à travailler:

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 

Les deux déclarations d'impression doivent être différentes, mais ils sont les mêmes. Est-ce que quelqu'un sait la meilleure façon de fusionner un objet Time et Date?

Répondre

15

Vous devez l'affecter. Si vous allez dans le script/console:

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

alors peut-être:

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

pourrait travailler pour vous. Je ne sais pas ce que je pense de cette solution, mais cela devrait fonctionner.

+1

J'ai essayé de changer les parties d'un objet temps avec peu de chance. J'ai regardé les rdocs pour Time et je n'ai rien trouvé qui m'amènerait à utiliser la méthode "change". Merci pour cette réponse, m'a beaucoup aidé. – Tass

+0

C'est quelqu'un de l'année 2012 ... euh ... Salut, tu as appelé? – wrongusername

0

Notez également que pour changer la minute où vous utilisez :min au lieu de :minute