Truy vấn dữ liệu với ActiveRecord - Phần giới thiệu
This post hasn't been updated for 8 years
Trong loạt bài viết này, chúng ta sẽ đi sâu vào ActiveRecord để cho bạn mọi thứ cần biết để quản lý và truy vấn các mối quan hệ phức tạp.
Bạn cần biết những gì?
Bài viết này sẽ tập trung vào cách sử dụng tiên tiến của phương pháp xây dựng truy vấn trong ActiveRecord, cũng như làm thế nào chúng ta có thể thoát ra khỏi việc tùy chỉnh SQL khi chúng ta thực sự cần. Mục tiêu của chúng ta là tránh phải lọc dữ liệu và phân loại chúng như trong các phiên bản cũ của Ruby.
Có một sự hiểu biết về SQL là yêu cầu thiết yếu.
Bạn cũng nên làm quen với các ActiveRecord, các quan hệ, và các phương pháp truy vấn đơn giản mô tả dưới đây.
Phương pháp truy vấn ActiveRecord cơ bản
Các mã sau đây nên trông rất quen thuộc:
Person.
where(location: location).
order(name: :asc).
limit(10)
Position.where(active: true).limit(5)
person.positions.where(active: true)
Triển khai truy vấn trong các Model
Bạn nên làm quen với việc tạo ra các class methods hoặc scopes để triển khai logic truy vấn của bạn:
class Person < ActiveRecord::Base
def self.alphabetical
order(name: :asc)
end
scope :billable, -> { where(billable: true) }
has_one :latest_position,
-> { order(starts_on: :desc) },
class_name: "Position"
end
Class methods và scopes
Không có nhiều sự khác biệt giữa việc định nghĩa class method và ActiveRecord's scope tại thời điểm này, do đó, nó thực sự chỉ là vấn đề về sở thích. Điều quan trọng nhất là để chọn một kiểu mà bạn thích và gắn bó với nó.
Chúng ta sẽ học gì?
Bạn sẽ cảm thấy tuyệt vời về tất cả những điều trên. Trong phần còn lại của loạt bài viết này, chúng ta sẽ được đi sâu vào những điều thú vị hơn:
- Truy vấn đối tượng và các đối tượng có quan hệ với chúng chỉ với 1 câu lệnh gọi vào database
- Viết các câu lệnh SQL tùy biến khi cần
- Thực hiện tính toán trên dữ liệu và lọc kết quả nhận được. Và, quan trọng nhất, làm thế nào để làm tất cả những điều này trong cơ sở dữ liệu - không phải trong ứng dụng của bạn như các phiên bản Ruby cũ - trong khi giữ lại hầu hết các ActiveRecord DSL mà chúng ta biết đến. Điều này sẽ dẫn đến nhiều hiệu quả hơn khi phát triển ứng dụng và bảo trì code. Băt đâu nào!
All Rights Reserved