Saya ingin mendapatkan semua catatan di mana bidang create_at kurang dari hari ini (tanggal). Apa ada yang seperti ini:
MyTable.find_by_created_at(< 2.days.ago)
ruby
activerecord
Sayuj
sumber
sumber
MyTable1.where(MyTable[:created_at] < Time.now)
apakah itu mungkin?Untuk mendapatkan semua catatan yang
MyTable
dibuat hingga 2 hari yang lalu:MyTable.where(created_at: Date.new..2.days.ago)
Perhatikan bahwa Anda juga dapat mencari catatan dengan bidang yang berisi bidang di masa mendatang dengan cara yang sama, yaitu untuk mendapatkan semua catatan
MyTable
denganevent_date
setidaknya 2 hari dari sekarang:MyTable.where(event_date: 2.days.from_now..DateTime::Infinity.new)
sumber
"created_at" BETWEEN $1 AND $2 [["created_at", "4713-01-01 BC"], ["created_at", "2020-03-31 21:43:28.113759"]]
Cara lain adalah dengan membuat scope di dalam
MyModel
atauApplicationRecord
menggunakan interface Arel seperti tokland sugensted dalam jawabannya seperti ini:scope :col, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
Contoh penggunaan ruang lingkup:
MyModel.col(:created_at, :lt, 2.days.ago)
Untuk semua prediksi, periksa dokumentasi atau kode sumber . Cakupan ini tidak memutuskan
where
rantai. Artinya, Anda juga dapat melakukan:MyModel.custom_scope1.col(:created_at, :lt, 2.days.ago).col(:updated_at, :gt, 2.days.ago).custom_scope2
sumber
ActiveRecord::Relation
mendefinisikan metode instance dengan namaarel
yang berarti Anda hanya perlu memilih nama yang berbeda.Time.now mengacu pada sekarang atau detik ini. Jadi untuk menemukan semua pengguna sebelumnya sekarang cukup gunakan
@users = User.all
Ini akan menemukan semua pengguna sebelumnya sekarang dan akan mengecualikan pengguna atau pengguna mendatang yang bergabung setelah Time.now
sumber