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

Mik*_*ike 42 sql ruby-on-rails-3

试图搜索出现的电影的发布日期大于今天的日期

 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')
Run Code Online (Sandbox Code Playgroud)

Ada*_*lin 92

尝试 __CODE__


或者在Rails 3+中: __CODE__

  • 你不再需要这个数组语法了.rails 3,4,:) (19认同)
  • 请详细说明@oma (2认同)
  • @AdamWaite,意味着Q中的语法实际上对于较新版本是正确的 (2认同)

小智 16

在 Ruby 2.7 中,您可以尝试以下操作:

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


Mar*_*n13 12

更新

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

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


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

Movie.where('release >': DateTime.now)
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您坚持下去。尽管它已被恢复(尚未合并),但我仍然发现它是一本很酷且超级有趣的读物。 (2认同)

Pat*_*ick 11

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

User.where(created_at: 3.days.ago..Time.now)
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以执行“User.where(created_at: ..Time.now)”以使下限不受限制。即它会找到在 Time.now 之前的某个时间创建的任何内容。 (6认同)
  • 这真的很好@Patrick。FWIW,如果您想要一个 **独家** 日期范围,请在该范围中添加第三个点,即“User.where(created_at: 3.days.ago...Time.now)”,它的工作方式就像您一样预计。 (3认同)