Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีการใช้ Rails Where Method (พร้อมตัวอย่าง)

ใน 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 &not วิธีเขียนข้อความค้นหาที่ซับซ้อนมากขึ้น

ตอนนี้ถึงตาคุณแล้วที่จะนำสิ่งนี้ไปปฏิบัติ

ขอบคุณที่อ่านนะคะ 🙂