Bagaimana saya bisa menemukan catatan di database saya dengan kondisi yang tidak sama? Saya sudah memiliki ini sekarang, tetapi adakah cara yang bagus untuk melakukannya?
GroupUser.where('user_id != ?',me)
Bagaimana saya bisa menemukan catatan di database saya dengan kondisi yang tidak sama? Saya sudah memiliki ini sekarang, tetapi adakah cara yang bagus untuk melakukannya?
GroupUser.where('user_id != ?',me)
Jawaban:
Dalam Rails 4.x (Lihat http://edgeguides.rubyonrails.org/active_record_querying.html#not-conditions )
Di Rel 3.x
Untuk mempersingkat panjang, Anda bisa menyimpan
GroupUser.arel_table
dalam variabel atau jika menggunakan di dalam modelGroupUser
itu sendiri misalnya, dalamscope
, Anda dapat menggunakanarel_table[:user_id]
bukanGroupUser.arel_table[:user_id]
Kredit sintaks Rails 4.0 untuk jawaban @ jbearden
sumber
GroupUser.where(other_condition: true).where.not(user_id: user_id)
Rel 4
sumber
Satu-satunya cara Anda bisa membuatnya lebih menarik adalah dengan MetaWhere .
MetaWhere memiliki sepupu baru yang disebut Squeel yang memungkinkan kode seperti ini:
Tak perlu dikatakan lagi, bahwa jika ini adalah satu-satunya refactor yang akan Anda buat, itu tidak layak menggunakan permata dan saya hanya akan bertahan dengan apa yang Anda dapatkan. Squeel berguna dalam situasi di mana Anda memiliki banyak pertanyaan kompleks yang berinteraksi dengan kode Ruby.
sumber
Rel 4:
Jika Anda ingin menggunakan keduanya tidak sama dan sama, Anda dapat menggunakan:
Jika Anda ingin menggunakan berbagai operator (mis.
>
,<
), Pada titik tertentu, Anda mungkin ingin beralih notasi ke yang berikut:sumber
GroupUser.where(group_id: group_id).where.not(user_id: user_id)
?Anda harus selalu menyertakan nama tabel dalam kueri SQL saat berhadapan dengan asosiasi.
Memang jika tabel lain memiliki
user_id
kolom dan Anda bergabung dengan kedua tabel, Anda akan memiliki nama kolom yang ambigu dalam kueri SQL (yaitu masalah).Jadi, dalam contoh Anda:
Atau sedikit lebih bertele-tele:
Perhatikan bahwa jika Anda menggunakan hash, Anda tidak perlu khawatir tentang itu karena Rails mengurusnya untuk Anda:
Di Rails 4, seperti yang dikatakan oleh @ dr4k3, metode kueri
not
telah ditambahkan:sumber
Di Rails 3, saya tidak tahu sesuatu yang lebih menarik. Namun, saya tidak yakin jika Anda sadar, kondisi tidak sama Anda tidak cocok dengan (NAMA pengguna) nilai NULL. Jika Anda menginginkannya, Anda harus melakukan sesuatu seperti ini:
sumber