Saya perlu menanyakan komentar yang dibuat dalam satu hari. Bidang adalah bagian dari stempel waktu standar, adalah created_at
. Tanggal yang dipilih berasal dari a date_select
.
Bagaimana saya bisa menggunakannya ActiveRecord
untuk melakukan itu?
Saya butuh sesuatu seperti:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
Saya tidak jelas tentang apa yang Anda maksud dengan 'menggunakan rentang dengan sendirinya'scope :between, -> (a, b) { where(created_at: a..b) }
Saya pribadi akan menciptakan ruang lingkup untuk membuatnya lebih mudah dibaca dan digunakan kembali:
Di Anda Comment.rb, Anda bisa menentukan ruang lingkup:
Kemudian untuk kueri yang dibuat antara:
Semoga ini bisa membantu.
sumber
#between?
menerima rentang.Rails 5.1 memperkenalkan metode penolong tanggal yang baru
all_day
, lihat: https://github.com/rails/rails/pull/24930Jika Anda menggunakan Rails 5.1, kueri akan terlihat seperti:
sumber
require 'active_record'
dan Anda sudah siap!Kode ini bisa digunakan untuk Anda:
Untuk info lebih lanjut, lihat perhitungan Waktu
Catatan: Kode ini sudah usang . Gunakan kode dari jawaban jika Anda menggunakan Rails 3.1 / 3.2
sumber
date()
; itu berpotensi lebih db independen.Saya menjalankan kode ini untuk melihat apakah jawaban yang diperiksa berhasil, dan harus mencoba bertukar tanggal untuk memperbaikinya. Ini bekerja -
Jika Anda berpikir outputnya seharusnya 36, pertimbangkan ini, Pak, berapa hari adalah 3 hari untuk 3 orang?
sumber
sumber
Saya telah menggunakan 3 titik, bukan 2. Tiga titik memberi Anda rentang yang terbuka di awal dan ditutup di akhir, jadi jika Anda melakukan 2 kueri untuk rentang berikutnya, Anda tidak bisa mendapatkan baris yang sama kembali kedua.
Dan, ya, selalu menyenangkan untuk menggunakan lingkup!
sumber
Jika Anda hanya ingin mendapatkan satu hari akan lebih mudah dengan cara ini:
sumber
ada beberapa cara. Anda dapat menggunakan metode ini:
Atau ini:
sumber
Seharusnya ada perilaku rekaman aktif default pada saya ini. Tanggal pertanyaan sulit, terutama ketika zona waktu terlibat.
Lagi pula, saya menggunakan:
sumber
Anda dapat menggunakan permata di bawah ini untuk menemukan catatan di antara tanggal,
Permata ini cukup mudah digunakan dan lebih jelas. Dengan bintang saya menggunakan permata ini dan API lebih jelas dan dokumentasi juga dijelaskan dengan baik.
Di sini Anda bisa melewati bidang kami juga
Post.by_month("January", field: :updated_at)
Silakan lihat dokumentasi dan coba.
sumber