Ruby Rails Time.change работает не так, как я ожидал ... Я проверил документы! - PullRequest
4 голосов
/ 09 апреля 2009

У меня есть форма, которая содержит один элемент даты и 3 элемента времени. Это связано с тем, что 3 события будут происходить в одну дату, и я не хочу, чтобы пользователь вводил эту дату 3 раза.

На стороне сервера я хотел бы объединить одну дату с 3-мя разами, чтобы получить 3 объекта datetime. Я думал, что могу сделать что-то вроде:

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

Два оператора печати должны отличаться, но они одинаковы. Кто-нибудь знает лучший способ объединить объект времени и даты?

Ответы [ 2 ]

15 голосов
/ 09 апреля 2009

Вы должны назначить его. Если вы заходите в скрипт / консоль:

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

может работать на вас. Я не знаю, что я думаю об этом решении, но оно должно сработать.

0 голосов
/ 25 апреля 2013

Также обратите внимание, что для изменения минуты вы используете :min вместо :minute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...