【问题标题】:What is the best way to calculate difference between TIMESTAMP values in Ruby on Rails在 Ruby on Rails 中计算 TIMESTAMP 值之间差异的最佳方法是什么
【发布时间】:2014-09-24 12:44:12
【问题描述】:

在 Ruby on Rails 4.1.4 中实现以下行为的最佳方法是什么?

我在 DB 中有一个表,其中有一列包含 TIMESTAMP 值。如果此列中的 TIMESTAMP 值与当前时间之间的差异大于某个月或天数,我需要遍历此表中的所有记录并执行一些操作。

最好的做法是什么?将 TIMESTAMP 值转换为 Unix 时间或使用一些自己处理日期的类?

提前致谢。

【问题讨论】:

  • 我会寻找一种方法,您不必遍历表中的所有记录。
  • 您期望的输入和输出是什么?请解释一下。
  • 这个时间戳是什么?你从哪里得到它?

标签: sql ruby-on-rails ruby postgresql ruby-on-rails-4


【解决方案1】:

你可以像这样过滤你的结果:

result = YourModel.where("created_at >= ?", 5.days.ago)

result = YourModel.where(created_at: 5.days.ago..Time.now)

你可以对结果进行迭代:

result.each do |item|
  #Do something with item
end

OBS:我假设 TIMESTAMP 列是 created_at,但您可以将其替换为您的列。

【讨论】:

  • 非常感谢!我需要通过 find_each 方法对其进行迭代,对吧?
  • 您可以使用each method 来完成。更新了答案。
【解决方案2】:

如果您在该列上有索引,您应该可以这样做。如果没有,您应该添加一个迁移来索引该列。

之后,您可以在模型上添加一个方法来查找所有比您的条件更早的记录,如下所示:

class Model
  def self.older_than(timeframe)
    where('column_with_timestamp < ?', timeframe)
  end
end

然后您可以像Model.older_than(1.month.ago) 一样查询,这将返回时间戳早于指定日期的记录。然后你可以像往常一样迭代它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2010-12-08
    • 2020-09-26
    • 2018-11-19
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多