【问题标题】:Updating all created_at rows to be 10 minutes before in Ruby Sequel在 Ruby Sequel 中将所有 created_at 行更新为 10 分钟前
【发布时间】:2018-08-29 16:47:11
【问题描述】:

我正在尝试获取我表中的所有 created_at 时间戳,并从它减少大约 10 分钟(600 秒)。但我似乎无法弄清楚。

MyApp::Model::MyTable.select(:created_at).update(:created_at => :created_at - 600)

我从created_at 列中选择所有行并对所述行执行更新,以便现在每行都为created_at - 600 秒(10 分钟)。但是,当我尝试这个时,它会显示incompatible data types in combination

谁能给我一个更好的解决方案?

【问题讨论】:

  • 除其他外,这将是一种不安全的方法,因为不能保证- 600 会被解释为以秒为单位。或者更确切地说,仅从示例代码的方式来看并不能保证。我认为“不兼容的数据类型”是因为 created_at 是一个日期时间数据类型,而您正试图与它进行交互,就像它是一个整数一样。

标签: mysql ruby sequel


【解决方案1】:

我会在数据库中使用 SQL 命令执行此操作,以避免首先将所有记录加载到内存中:

MyApp::Model::MyTable.update_sql(
  created_at: Sequel.lit('DATE_SUB(created_at, INTERVAL 10 MINUTE)')
)

查看DATE_SUB的文档。

【讨论】:

  • 我的续集中好像没有update_allNoMethodError: undefined method update_all' for MyApp::Model::MyTable:Class org/jruby/RubyBasicObject.java:1657:in method_missing'
  • 对不起,我错过了你使用Sequel。请查看我的更新答案。
猜你喜欢
  • 2018-08-26
  • 2012-05-31
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多