Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách sử dụng phương pháp Rails Where (Có ví dụ)

Trong Rails, bạn có thể truy vấn cơ sở dữ liệu thông qua các mô hình của mình để truy cập dữ liệu của bạn.

Bạn có thể thực hiện việc này bằng cách sử dụng ActiveRecord phương pháp.

Giống như where , find hoặc find_by .

Kết quả bạn nhận được :

  • Với find_by , một bản ghi hoặc nil
  • Với where , một ActiveRecord::Relation đối tượng
  • Với find , một bản ghi duy nhất, được tìm thấy bởi cột chính của nó (thường là id ), đưa ra một ngoại lệ nếu không tìm thấy

Nói cách khác :

Nếu bạn đang mong đợi một bản ghi (một người dùng cụ thể), hãy sử dụng find_by , đối với nhiều bản ghi (danh sách người dùng), hãy sử dụng where .

Nhưng where có nhiều cách để sử dụng, điều này thường gây nhầm lẫn cho người mới bắt đầu.

Không sao!

Chúng ta sẽ xem xét các cách khác nhau mà bạn có thể sử dụng where trong các ứng dụng Rails của bạn.

Điều kiện cơ bản ở đâu

Mục đích của việc sử dụng where là tạo một truy vấn lọc thông tin trong cơ sở dữ liệu của bạn, vì vậy bạn chỉ nhận được các hàng bạn muốn.

Ví dụ :

Được tặng một Book mô hình, với title , author &category .

Bạn có thể muốn tìm hiểu tất cả các sách của một tác giả cụ thể hoặc tất cả các sách thuộc một danh mục cụ thể.

Đây là một truy vấn :

Book.where(category: "Ruby")

Thao tác này trả về tất cả các sách có category của “Ruby”.

Bạn cũng có thể kết hợp các điều kiện.

Như thế này :

Book.where(category: "Ruby", author: "Jesus Castello")

Thao tác này trả về các sách phù hợp với cả category &author .

Và bạn có thể kết hợp where với một phạm vi.

# scope definition
class Book
  scope :long_title, -> { where("LENGTH(title) > 20") }
end

# controller code
@books = Book.long_title.where(category: "Ruby")

Sử dụng hàm băm (fruit: "apple" ), cho phép bạn kiểm tra xem một cột có bằng thứ gì không.

Nhưng nếu bạn không tìm kiếm sự bình đẳng thì sao?

Sau đó, bạn sẽ phải sử dụng một chuỗi.

Đường ray ở đâu:Lớn hơn &nhỏ hơn

Nếu bạn muốn kiểm tra “lớn hơn”, “nhỏ hơn” hoặc những thứ tương tự…

Làm như thế này :

Book.where("LENGTH(title) > 20")

Nếu bạn cần nội suy các giá trị…

Làm như thế này :

Book.where("LENGTH(title) > ?", params[:min_length])

? này được gọi là “trình giữ chỗ” và nó được sử dụng để bảo mật nhằm tránh các cuộc tấn công “đưa vào SQL”.

Một tùy chọn khác là sử dụng trình giữ chỗ được đặt tên.

Ví dụ :

Book.where("LENGTH(title) > :min", min: params[:min_length])

Tôi thấy điều này ít phổ biến hơn trình giữ chỗ dấu chấm hỏi, nhưng nó có thể hữu ích cho các truy vấn liên quan đến nhiều giá trị nội suy.

Cách sử dụng khi Không và Ở đâu Hoặc Điều kiện

Hãy xem xét các truy vấn phức tạp hơn.

Nếu bạn muốn kiểm tra xem một điều kiện KHÔNG đúng, thì bạn có thể kết hợp where với not phương pháp.

Đây là một ví dụ :

Book.where.not(category: "Java")

Một ví dụ khác :

Book.where.not(title: nil)

Điều này tìm thấy Book s với title đó không phải là nil .

Còn điều kiện HOẶC thì sao?

Bạn có thể kết hợp where với or để lấy các hàng phù hợp với BẤT KỲ hai điều kiện nào trở lên.

Đây là cách hoạt động :

Book.where(category: "Programming").or(Book.where(category: "Ruby"))

Điều này kết hợp hai where các truy vấn thành một.

Hãy thử!

Ví dụ về Rails Where IN Array

Tất cả các ví dụ mà chúng tôi đã thấy đều tìm kiếm một giá trị cụ thể.

Nhưng bạn có thể tìm kiếm nhiều giá trị.

Làm thế nào?

Sử dụng một mảng!

Ví dụ :

Book.where(id: [1,2,3])

Điều này tạo ra một truy vấn “IN” sẽ tìm kiếm đồng thời tất cả các id này.

SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)

Bạn sẽ tìm thấy truy vấn này trong nhật ký đường ray.

Rails Tham gia Điều kiện Hiệp hội

Nếu bạn đang muốn so khớp dựa trên một giá trị liên kết, bạn sẽ phải cung cấp liên kết đó với các joins phương pháp.

Sau đó, bạn có thể làm điều này :

Book.joins(:comments).where(comments: { id: 2 })

Với truy vấn này, bạn sẽ nhận được tất cả các sách có nhận xét và nhận xét id2 .

Đối với phiên bản chuỗi :

Book.joins(:comments).where("comments.id = 2")

Nơi comments là tên bảng và id là tên cột.

Cách tìm kiếm trong văn bản với điều kiện giống như ở đâu

Nếu bạn muốn triển khai một chức năng tìm kiếm, bạn có thể muốn cho phép đối sánh một phần.

Bạn có thể thực hiện việc này với truy vấn “LIKE”.

Đây là một ví dụ :

Book.where("title LIKE ?", "%" + params[:q] + "%")

Điều này sẽ tìm thấy tất cả các tiêu đề có văn bản tìm kiếm, được cung cấp bởi params (params[:q] ), bất kỳ đâu bên trong tiêu đề.

Truy vấn rất hữu ích!

biểu tượng phần trăm là gì ?

Trong SQL, % là một ký tự đại diện.

Video:Chi tiết ở đâu so với Find_By

Tóm tắt

Bạn đã học cách sử dụng Rails where phương pháp để truy vấn ActiveRecord của bạn mô hình!

Bao gồm :

  • Cách lọc theo nhiều điều kiện
  • Cách sử dụng mảng để tìm nhiều hàng một cách hiệu quả
  • Cách sử dụng where kết hợp với or &not các phương pháp để viết các truy vấn phức tạp hơn

Bây giờ đến lượt bạn áp dụng điều này vào thực tế.

Cảm ơn vì đã đọc 🙂