Saya memiliki pencarian ini di Rails 3:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
Tapi saya perlu :date => p[:date]
kondisinya setara :date > p[:date]
. Bagaimana saya bisa melakukan ini? Terima kasih sudah membaca.
where()
. Menggunakanwhere()
secara otomatis lolos dari input.where()
secara otomatis lolos input ketika digunakan dalam format yang ditunjukkan di atas dengan tanda tanya sebagai pengganti variabel, dengan mereka terdaftar setelah itu dalam panggilan fungsi. TIDAK aman menggunakannya dengan cara ini:Note.where("date > #{p[:date]}")
where("user_id = ?",current_user.id)
lebih berisiko daripadawhere(user_id: current_user.id)
dalam kasus di mana Anda menggabungkan model yang keduanya memilikiuser_id
bidang. Menggunakan sarana notasi SQL mentah Anda perlu menyertakan klarifikasi meja sendiri, misalnya:where("notes.user_id = ?",current_user.id)
.Jika Anda mengalami masalah di mana nama kolom ambigu, Anda dapat melakukan:
sumber
Anda dapat mencoba menggunakan:
setara dalam sql
Hasilnya adalah:
Dan saya sudah berubah juga
Untuk
sumber
Rails 6.1 menambahkan 'sintaks' baru untuk operator perbandingan dalam
where
kondisi, misalnya:Jadi permintaan Anda dapat ditulis ulang sebagai berikut:
Berikut ini tautan ke PR tempat Anda dapat menemukan lebih banyak contoh.
sumber