Ruby Rails Time.change没有像我期望的那样工作......我检查了文档!

Ton*_*ony 4 ruby time datetime ruby-on-rails date

我有一个包含一个日期元素和3个时间元素的表单.这是因为在一个日期将发生3次时间事件,我不希望用户必须输入该日期3次.

在服务器端,我想将一个日期与3次组合以获得3个日期时间对象.我以为我可以这样做:

time_object.change(:day => date_object.day, :month => date_object.month, :year => date_object.year)
Run Code Online (Sandbox Code Playgroud)

但这没效果.这是我写的一个简单的测试,我希望它可以工作:

  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
Run Code Online (Sandbox Code Playgroud)

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

nit*_*der 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
Run Code Online (Sandbox Code Playgroud)

也许:

self.show_time = self.show_time.change(:year => 2012)
Run Code Online (Sandbox Code Playgroud)

可以为你工作.我不知道我对这个解决方案的感受,但它应该有效.