您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Rails`where`的时间少于查询时间

Rails`where`的时间少于查询时间

如果您使用的是Ruby 2.6,则可以使用无穷范围,而在Ruby 2.7中,可以使用无起点范围。

例如:

# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)

产生

SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"

# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)

产生

SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'

现在可以在Rails 5中实现!

User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)

生成sql

SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').

似乎没有一种方法可以使用基本where哈希语法生成大于或小于查询的时间戳。在我的问题下概述了最简单和最易读的方法Current Simple Solution

另一种实现方法是使用ARel,但您必须进行一些不太常见的调用。首先,您可以获取AR类的ARel表的句柄,访问该列,并通过带有的参数传递大于gt,大于或等于gteq,小于lt和/或小于或等于lteq方法的结果where

在上述情况下,将执行以下操作:

last_deposit_column = User.arel_table[:last_deposit]
last_deposit_over_ten_days_ago = last_deposit_column.gteq(10.days.ago)
User.where(last_deposit_over_ten_days_ago)
其他 2022/1/1 18:37:42 有393人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶