繁体   English   中英

日期大于给定日期查询的 Rails

[英]Rails where date is greater than given date query

尝试搜索即将上映的电影的发行日期大于今天的日期

 Movie.where('release > ?', Date.today)
ActiveRecord::StatementInvalid: Mysql::ParseError: You have an error in your SQL     syntax;    check the manual that corresponds to your MySQL server version for the right syntax to use near 'release > '2011-09-25')' at line 1: SELECT `movies`.* FROM `movies` WHERE (release > '2011-09-25')

轨道 3+ :

Movie.where('release > ?', DateTime.now)

预导轨 3

Movie.where(['release > ?', DateTime.now])

更新

Rails 核心团队决定暂时恢复此更改,以便更详细地讨论它。 有关更多信息,请参阅此评论此 PR

我仅出于教育目的而留下我的答案。


用于在 Rails 6.1 中进行比较的新“语法”(已恢复)

Movie.where('release >': DateTime.now)

这是PR 的链接,您可以在其中找到更多示例。

在最新版本的 rails 中,您可以这样做:

User.where(created_at: 3.days.ago..Time.now)

在此处查看其他一些示例: https : //stackoverflow.com/a/24150094

在 Ruby 2.7 中,你可以试试这个:

License.where(expiration: Time.zone.today..)
SELECT "licenses".* FROM "licenses" WHERE "licenses"."expiration" >= '2021-07-06 15:12:05'

Ruby beginless/endless ranges 也可以用作开箱即用的解决方案:

Post.where(id: 1..)

=> Post Load (0.4ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" >= $1 [["id", 1]]

Post.where(id: ..9)

=> Post Load (0.3ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" <= $1 [["id", 9]]

Post.where(id: ...9)

=> Post Load (0.3ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" < $1 [["id", 9]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM