ใน Rails คุณสามารถสืบค้นฐานข้อมูลผ่านโมเดลของคุณเพื่อเข้าถึงข้อมูลของคุณ
คุณสามารถทำได้โดยใช้ ActiveRecord วิธีการ
ชอบ where , find , หรือ find_by .
ส่งผลให้คุณได้รับ :
- ด้วย
find_by, ระเบียนเดียวหรือnil - ด้วย
where,ActiveRecord::Relationวัตถุ - ด้วย
findเป็นระเบียนเดียวที่พบโดยคอลัมน์หลัก (โดยปกติคือid) ทำให้เกิดข้อยกเว้นหากไม่พบ
กล่าวอีกนัยหนึ่ง :
หากคุณต้องการบันทึกหนึ่งรายการ (ผู้ใช้เฉพาะ) ให้ใช้ find_by สำหรับหลายระเบียน (รายชื่อผู้ใช้) ให้ใช้ where .
แต่ where มีหลายวิธีในการใช้งาน ซึ่งมักจะสร้างความสับสนให้กับผู้เริ่มต้น
ไม่มีปัญหา!
เราจะมาดูวิธีต่างๆ ที่คุณสามารถใช้ where ในแอปพลิเคชัน Rails ของคุณ
พื้นฐานที่เงื่อนไข
วัตถุประสงค์ของการใช้ where คือการสร้างแบบสอบถามที่กรองข้อมูลในฐานข้อมูลของคุณ ดังนั้นคุณจะได้เฉพาะแถวที่คุณต้องการ
ตัวอย่างเช่น :
ได้รับ Book รุ่นที่มี title , author &category .
คุณอาจต้องการค้นหาหนังสือทั้งหมดโดยผู้แต่งคนใดคนหนึ่ง หรือหนังสือทั้งหมดที่จัดอยู่ในหมวดหมู่เฉพาะ
นี่คือข้อความค้นหา :
Book.where(category: "Ruby")
ส่งคืนหนังสือทั้งหมดที่มี category ของ “ทับทิม”
คุณยังสามารถรวมเงื่อนไขได้
ถูกใจสิ่งนี้ :
Book.where(category: "Ruby", author: "Jesus Castello")
ส่งคืนหนังสือที่ตรงกับทั้ง category &author .
และคุณสามารถรวม where มีขอบเขต
# scope definition
class Book
scope :long_title, -> { where("LENGTH(title) > 20") }
end
# controller code
@books = Book.long_title.where(category: "Ruby")
การใช้แฮช (fruit: "apple" ) ให้คุณตรวจสอบว่าคอลัมน์มีค่าเท่ากับบางสิ่งหรือไม่
แต่ถ้าคุณไม่ได้มองหาความเท่าเทียมกันล่ะ
จากนั้นคุณจะต้องใช้สตริง
รางที่ไหน:มากกว่า &น้อยกว่า
หากคุณต้องการตรวจสอบคำว่า “มากกว่า” “น้อยกว่า” หรืออะไรทำนองนั้น…
ทำแบบนี้ :
Book.where("LENGTH(title) > 20")
หากคุณต้องการสอดแทรกค่า…
ทำแบบนี้ :
Book.where("LENGTH(title) > ?", params[:min_length])
? เรียกว่า "ตัวยึดตำแหน่ง" และใช้เพื่อความปลอดภัยเพื่อหลีกเลี่ยงการโจมตี "การฉีด SQL"
อีกทางเลือกหนึ่งคือการใช้ตัวยึดตำแหน่งที่มีชื่อ
ตัวอย่าง :
Book.where("LENGTH(title) > :min", min: params[:min_length])
ฉันพบว่าสิ่งนี้ใช้น้อยกว่าตัวยึดตำแหน่งเครื่องหมายคำถาม แต่อาจมีประโยชน์สำหรับข้อความค้นหาที่เกี่ยวข้องกับค่าที่มีการสอดแทรกจำนวนมาก
วิธีใช้ Where Not &Where Or Conditions
มาดูคำค้นหาที่ซับซ้อนกว่านี้กัน
หากคุณต้องการตรวจสอบว่าเงื่อนไขไม่เป็นความจริง คุณสามารถรวม where ด้วย not วิธีการ
นี่คือตัวอย่าง :
Book.where.not(category: "Java")
ตัวอย่างอื่น :
Book.where.not(title: nil)
พบ Book ที่มี title นั่นไม่ใช่ nil .
แล้วเงื่อนไข OR ล่ะ
คุณสามารถรวม where ด้วย or วิธีรับแถวที่ตรงกับเงื่อนไขตั้งแต่สองเงื่อนไขขึ้นไป
นี่คือวิธีการทำงาน :
Book.where(category: "Programming").or(Book.where(category: "Ruby"))
ซึ่งรวมสอง where สืบค้นให้เป็นหนึ่งเดียว
ให้มันลอง!
Rails Where IN Array Example
ตัวอย่างทั้งหมดที่เราได้เห็นจะมองหาค่าเฉพาะค่าเดียว
แต่คุณสามารถหาค่าได้หลายค่า
อย่างไร
ใช้อาร์เรย์!
ตัวอย่าง :
Book.where(id: [1,2,3])
สิ่งนี้จะสร้างข้อความค้นหา "IN" ที่จะค้นหารหัสเหล่านี้ทั้งหมดพร้อมกัน
SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)
คุณจะพบคำค้นหานี้ในบันทึกของราง
Rails เข้าร่วมเงื่อนไขสมาคม
หากคุณต้องการจับคู่ตามค่าการเชื่อมโยง คุณจะต้องทำให้การเชื่อมโยงนั้นใช้ได้กับ joins วิธีการ
คุณก็ทำได้ :
Book.joins(:comments).where(comments: { id: 2 })
ด้วยแบบสอบถามนี้ คุณจะได้หนังสือทั้งหมดที่มีความคิดเห็นและความคิดเห็น id คือ 2 .
สำหรับเวอร์ชันสตริง :
Book.joins(:comments).where("comments.id = 2")
โดยที่ comments เป็นชื่อตาราง และ id คือชื่อคอลัมน์
วิธีค้นหาข้อความภายในด้วยเงื่อนไข LIKE ที่ไหน
หากคุณต้องการใช้ฟังก์ชันการค้นหา คุณอาจต้องอนุญาตให้มีการจับคู่บางส่วน
คุณทำได้โดยใช้ข้อความค้นหา "LIKE"
นี่คือตัวอย่าง :
Book.where("title LIKE ?", "%" + params[:q] + "%")
สิ่งนี้จะค้นหาชื่อทั้งหมดที่มีข้อความค้นหา โดยพารามิเตอร์ (params[:q] ) ที่ใดก็ได้ภายในชื่อ
คำค้นหาที่เป็นประโยชน์มาก!
สัญลักษณ์ร้อยละ . คืออะไร ?
ใน SQL % เป็นอักขระตัวแทน
วิดีโอ:Where vs Find_By in Detail
สรุป
คุณได้เรียนรู้วิธีการใช้ Rails where วิธีการสอบถาม ActiveRecord . ของคุณ โมเดล!
รวมถึง :
- วิธีการกรองตามเงื่อนไขต่างๆ
- วิธีใช้อาร์เรย์เพื่อค้นหาหลายแถวอย่างมีประสิทธิภาพ
- วิธีใช้
whereร่วมกับor¬วิธีเขียนข้อความค้นหาที่ซับซ้อนมากขึ้น
ตอนนี้ถึงตาคุณแล้วที่จะนำสิ่งนี้ไปปฏิบัติ
ขอบคุณที่อ่านนะคะ 🙂