2011-11-16 22 views
5

Có thể truy vấn các thay đổi chưa lưu bằng ActiveRecord của Rail hoặc phương pháp tương tự khác không?Sử dụng Rails ActiveRecord để truy vấn đối tượng chưa được lưu

Ví dụ về phiên tương tác Ruby bên dưới. Những gì tôi muốn thấy, là dòng thứ tư cho thấy kết quả của '999' thay vì '10'. Tôi đang sử dụng để sử dụng NET và Entity Framework, nơi một cái gì đó tương tự như điều này là có thể. Có lẽ trong Ruby có một cách tốt hơn hoặc khác nhau để làm điều tương tự. Tôi rõ ràng có thể thêm tổng số trong một vòng lặp, nhưng tôi tìm thấy cú pháp truy vấn thanh lịch hơn. Bất kỳ trợ giúp được đánh giá cao.

i = Inventory.where(:product_id => 1) 
i.sum(:available) => 10 
i.first.available = 999 
i.sum(:available) => 10 
+0

tôi đã sử dụng cú pháp của Ruby tiêu chuẩn trên ActiveRecords của tôi thay vì sử dụng cú pháp ActiveRecord. Đoạn mã dưới đây làm điều gì đó rất giống với những gì tôi đã dự định khi tôi đặt câu hỏi. self.order_pickpacks.find_all {| pickpack | pickpack.product_id == product_id} .inject (0) {| sum, item | sum + item.quantity} – kstevens715

Trả lời

4

Không, vì sum() thực sự là dịch sang SQL và chạy trên db, bạn phải lưu các bản ghi vào db để cho truy vấn để trả lại kết quả mà bạn muốn.

Ngoài ra, bạn có thể sử dụng phương pháp Enumerable#sum trong ActiveSupport, trong đó có một khối, như vậy:

all = Inventory.where(:product_id => 1).to_a 
all.first.available = 999 
all.sum(&:available) 
Các vấn đề liên quan