Bagaimana saya harus menulis pernyataan bersyarat ketika saya ingin mendapatkan semua rekaman yang dibuat hari ini?
ruby-on-rails
date
rails-activerecord
Victor Lam
sumber
sumber
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
sangat pintar, saya akan mendukungPost.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
. Ada gunanya melakukan dengan cara yang dapat Anda lakukan untuk memanipulasi waktu. Misalnya, jika Anda menguji, Anda mungkin akan memanipulasi waktu dan kemudian opsi pertama tidak akan berfungsi. Anda ingin menghindari kemungkinan kegagalan di masa mendatang yang mungkin memerlukan waktu debug.Saya tahu pertanyaan ini memiliki jawaban yang diterima. Solusi yang disarankan dalam jawaban yang diterima dapat menyebabkan masalah kinerja saat ukuran tabel bertambah.
Biasanya, jika Anda melakukan pencarian berdasarkan
created_at
kolom, tambahkan indeks pada tabel di file migrasi Anda.Sekarang, untuk mencari rekaman yang dibuat hari ini:
Rel 3/4
Untuk mencari postingan yang dibuat pada hari tertentu.
--------- ATAU -------------
Tambahkan metode statis ke model Anda
Rel 2
--------- ATAU -------------
Tambahkan name_scope ke model Anda
sumber
scope
contoh dalam posting ini hanya untuk Rails 3, karena sepertinya berada di bawah judul Rails 2. Di Rails 2, Anda harus menggunakannamed_scope
daripadascope
. Selain itu, di Rails 3, Anda dapat menggunakan metode kelas yang setaradef self.today where("created_at >= ?", Time.now.beginning_of_day) end
yang mungkin lebih bersih daripada menggunakan cakupan dalam kasus ini, karena memungkinkan Anda untuk mengabaikan lambda.MySQL:
PostgreSQL:
sumber
Jawaban Mohit Jain diadaptasi untuk Rails3
sumber
Rails 5.1 memiliki
all_day
helper yang berguna di sini.atau
sumber
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
Ini "Namescopes" atribut dengan
table_name
.sumber
model.rb
posts_controller.rb
sumber
between_period
terlihat menarik. Saya tidak menemukan dokumentasi apa pun untuk itu. Bisakah Anda memberikan beberapa tautan? Bagaimana rel memilih kolom untuk perbandingan?Untuk beberapa alasan, tidak ada solusi lain di posting ini atau yang lain di StackOverflow yang berfungsi untuk saya (menggunakan Rails 4.2.4 dan Ruby 2.2.3p173). Ini adalah satu-satunya kueri yang dapat saya gunakan dengan database Postgres saya:
sumber
Untuk menanyakan catatan yang dibuat mulai hari ini
Gunakan ruang lingkup dengan arel
Lalu kita bisa menggunakannya
sumber
where('created_at >= now()')
hanya akan menemukan item di mana create_at berada di masa mendatang..lteq(Time.zone.now.end_of_day))
juga.Di rel 4.2.3 untuk mendapatkan catatan yang dibuat hari ini, menggunakan mysql gunakan yang berikut ini.
@usergoals = Goal.where ("userid =: userid dan Tanggal (create_at) =: date", {userid: params [: id], date: Date.today})
di sini saya menggunakan beberapa kondisi jika Anda mau, Anda dapat mengeditnya untuk satu kondisi.
sumber