Ruby on Rails

Truy vấn ActiveRecord nâng cao

Query interface, where, joins, includes, eager loading, vấn đề N+1, transactions, locking (optimistic/pessimistic)

28 câu hỏi phỏng vấn·
Mid-Level
1

Phương thức ActiveRecord nào lấy một bản ghi theo primary key của nó và ném ra ngoại lệ nếu không tìm thấy?

Câu trả lời

Phương thức find lấy một bản ghi theo primary key của nó và ném ra ngoại lệ ActiveRecord::RecordNotFound nếu bản ghi không tồn tại. Điều này đảm bảo code thất bại một cách rõ ràng thay vì tiếp tục với giá trị nil. Để tránh ngoại lệ và trả về nil thay thế, hãy dùng find_by(id: value).

2

Sự khác biệt chính giữa find_by và where.first trong ActiveRecord là gì?

Câu trả lời

find_by trả về trực tiếp một bản ghi đơn hoặc nil, trong khi where.first trả về một relation ActiveRecord rồi gọi first để lấy kết quả đầu tiên. Trên thực tế, find_by tạo ra một truy vấn được tối ưu hóa với LIMIT 1, trong khi where có thể tải nhiều dữ liệu hơn trước khi chọn phần tử đầu tiên.

3

Làm thế nào để truyền nhiều điều kiện cho phương thức where trong ActiveRecord?

Câu trả lời

Phương thức where chấp nhận một hash với nhiều khóa để chỉ định nhiều điều kiện sẽ được kết hợp bằng AND. Ví dụ, User.where(status: 'active', role: 'admin') tạo ra WHERE status = 'active' AND role = 'admin'. Đối với điều kiện OR, hãy dùng or hoặc truy vấn SQL thô.

4

Vấn đề N+1 trong ActiveRecord là gì?

5

Nên dùng phương thức nào để giải quyết vấn đề N+1 bằng cách tải trước các association?

+25 câu hỏi phỏng vấn

Nắm vững Ruby on Rails cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí