Edit 2 5/9/20
Jika Anda menggunakan Ruby 2.6, Anda dapat melakukannya dengan rentang tanpa akhir dan di Ruby 2.7 Anda dapat menggunakan rentang tanpa awal.
Mis.:
# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)
menghasilkan
SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"
dan
# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)
menghasilkan
SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'
Sunting
Ini sekarang dimungkinkan di Rails 5!
User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)
akan menghasilkan SQL
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').
Asli (dan Rails <5) Jawaban
Tampaknya tidak ada cara untuk menggunakan where
dasar sintaks hash untuk menghasilkan kueri cap waktu yang lebih besar atau lebih kecil dari kueri. Cara paling sederhana dan paling mudah dibaca diuraikan dalam pertanyaan saya di bawah Current Simple Solution
.
Cara lain untuk melakukannya menggunakan ARel tetapi Anda harus melakukan beberapa panggilan yang jarang terlihat. Pertama, Anda bisa mendapatkan pegangan ke tabel ARel kelas AR, mengakses kolom, meneruskan hasil yang lebih besar dari gt
, lebih besar dari atau sama dengan gteq
, kurang dari lt
, dan/atau kurang dari atau sama dengan lteq
metode dengan argumen ke where
.
Dalam situasi di atas ini akan dilakukan seperti:
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)