Rails Arel查询,在现在之前获取列一定的持续时间

Posted

技术标签:

【中文标题】Rails Arel查询,在现在之前获取列一定的持续时间【英文标题】:Rails Arel query, get columns a certain duration before now 【发布时间】:2021-10-31 11:52:57 【问题描述】:

我有一个 SQL 查询,我正在尝试使用 Arel 构建,以尝试检查时间戳是否在一定时间之前,如下所示:

SELECT * FROM some_table WHERE updated_at < NOW() - some_table.some_durations;

具体来说,我不确定如何将NOW() 插入到 Arel 的查询中,或者指定时间戳应该是过去的某个持续时间。这是我能得到的最接近的结果,但显然是错误的:

t = SomeTable.arel_table
t.project(Arel.star).where(t[:created_at].lt(t[:some_durations]))

【问题讨论】:

t.project(Arel.star).where(t[:created_at].lt(Arel.sql('NOW() - some_tables.some_durations'))) 这行得通吗? 这看起来就像我需要它做的一样!如果您想将其发布为答案,我可以将其标记为已接受! 【参考方案1】:

您应该尝试以下方法:

t.project(Arel.star).where(t[:created_at].lt(Arel.sql('NOW() - some_tables.some_durations')))

【讨论】:

以上是关于Rails Arel查询,在现在之前获取列一定的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

Rails Arel 选择不同的列

Arel、联接和 Rails 查询

如何使用 Arel(大概)创建一个不影响 Rails 3 中的查询的 ActiveRecord 范围?

如何在 Rails 中对 AREL 中的子查询进行连接

如何在 Arel 和 Rails 中进行 LIKE 查询?

Rails:将复杂的 SQL 查询转换为 Arel 或 ActiveRecord