Reputation: 1684
Trying to search where movies coming out have a release date greater than today's date
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')
Upvotes: 90
Views: 102177
Reputation: 3052
Ruby beginless/endless ranges can also be used as an out-of-the-box solution:
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]]
Replace id
with your date column release
Replace value with Date.today
Upvotes: 5
Reputation: 331
In Ruby 2.7, you can try this:
License.where(expiration: Time.zone.today..)
SELECT "licenses".* FROM "licenses" WHERE "licenses"."expiration" >= '2021-07-06 15:12:05'
Upvotes: 17
Reputation: 9328
Rails core team decided to revert this change for a while, in order to discuss it in more detail. See this comment and this PR for more info.
I am leaving my answer only for educational purposes.
Movie.where('release >': DateTime.now)
Here is a link to PR where you can find more examples.
Upvotes: 18
Reputation: 1387
In recent versions of rails, you can do this:
User.where(created_at: 3.days.ago..Time.now)
See some other examples here: https://stackoverflow.com/a/24150094
Upvotes: 45
Reputation: 14205
Movie.where('release > ?', DateTime.now)
Movie.where(['release > ?', DateTime.now])
Upvotes: 148