2010-10-13 21 views
6

Trong phần thống kê của ứng dụng Rails, tôi có một số cuộc gọi SQL tùy chỉnh được gọi với ActiveRecord :: Base.execute() từ mã mô hình. Họ trả về các tập hợp khác nhau.Cách sử dụng Bộ đệm truy vấn ActiveRecord với SQL tùy chỉnh

Một số truy vấn (giống hệt) này được chạy trong một vòng lặp trong bộ điều khiển và có vẻ như chúng không được bộ đệm truy vấn ActiveRecord lưu vào bộ nhớ cache.

Có cách nào để lưu trữ truy vấn SQL tùy chỉnh trong một yêu cầu không?

Trả lời

5

Không chắc liệu AR có hỗ trợ bộ đệm truy vấn cho #execute hay không, bạn có thể muốn tìm trong tài liệu. Dù sao bạn có thể làm, là sử dụng ghi nhớ, có nghĩa là bạn sẽ giữ kết quả theo cách thủ công cho đến khi yêu cầu hiện tại kết thúc.

làm điều gì đó như thế này trong mô hình của bạn:

def repeating_method_with_execute 
    @rs ||= ActiveRecord::Base.execute(...) 
end 

này về cơ bản sẽ chạy truy vấn chỉ trên lần đầu tiên và sau đó lưu các phản ứng để @rs đến khi toàn bộ yêu cầu chấm dứt.

nếu tôi không sai, Rails 2.x đã có macro tên memoization trên ActiveRecord mà làm tất cả mà tự động

hy vọng nó sẽ giúp

+0

tôi cần @@ class_variables, nhưng, khác hơn, chính xác những gì tôi đang tìm kiếm. Cảm ơn. –

Các vấn đề liên quan