【问题标题】:ruby on rails 3.0 TimeWithZone add hours can't be coerced into Fixnumruby on rails 3.0 TimeWithZone 添加小时不能被强制转换为 Fixnum
【发布时间】:2012-09-28 06:49:30
【问题描述】:

我的代码中出现了一个非常奇怪的错误,希望有人能帮助我解决这个问题。我有一个模型,它有一个 created_at 列和一个我创建的 duration 列。持续时间只是一个整数,假定为小时数。然后我试图将当前时间与 created_at 时间 + 持续时间进行比较,以查看该行是否已过期。我的代码如下所示:

@expire_time = purchase.duration.hours + purchase.created_at
if(@expire_time > Time.current)
  #do some stuff if the current time isn't greater than the expiration time
end

当我在控制台中运行第一行时,它工作正常,但是当我保存我的代码并通过它的一部分的路由调用它时,我在该行收到以下错误。

ActiveSupport::TimeWithZone 不能被强制转换为 Fixnum

是否有人对可能是什么问题/我如何正确进行此比较有任何想法?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 time fixnum


    【解决方案1】:

    我发现了问题...

    这不起作用: purchase.duration.hours + purchase.created_at

    但这确实: purchase.created_at + purchase.duration.hours

    【讨论】:

    • 将您自己的问题标记为答案。
    • 我想知道为什么会这样。 TimeWithZone 和 Fixnum 的 '+' 运算符是如何定义的?
    • 您不能将 TimeWithZone 添加到 fixnum 中,因为它似乎首先尝试将 TimeWithZone 转换为 fixnum 来执行此操作。但是,似乎向 TimeWithZone 定义/添加几个小时的“+”如您所料。恐怕我没有比这更详细的了。
    【解决方案2】:

    你刚刚救了我的命(或至少过去两个小时......),谢谢!

    DateTime.current + 7.days 效果不错,一周后返回日期时间

    7.days + DateTime.current

    TypeError(不能将DateTime强制转换为Integer)`

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多