2013-01-11 20 views
5

Trong ứng dụng Rails, tôi có ba kiểu (Đăng, Mua sắm :: Mục và Thư mục :: Mục). Mỗi mô hình đều có quan hệ với các mô hình khác (User, Category, City ...). Tất cả thông tin này tôi phải hiển thị trên trang chính. Nó sẽ giống như danh sách các mục được phân trang. Tôi đang sử dụng postgres cho DB.
Chúng tôi có thể viết mã như vậy trong điều khiển của chúng tôi:ứng dụng Rails. Thu thập các mục từ một số mẫu và hiển thị danh sách các mục được phân trang này trên trang chính

@postings = Posting.includes(:category, :subcategory, :user, :city).all 
@directory_items = Directory::Item.includes(:category, :user, :city).all 
@shop_items = Shop::Item.includes(:category, :user, :city, :phone).all 

và sắp xếp kết quả này. Nhưng nó không phải là cách tốt nhất.

Giải pháp thứ hai là viết truy vấn tùy chỉnh đang hủy ActiveRecord. Nhưng truy vấn này thực sự lớn và sẽ rất khó để hỗ trợ nó (chúng tôi có nhiều lần tham gia)
Giải pháp tốt nhất cho điều đó với số lượng truy vấn DB nhỏ nhất là gì? (Đây là trang chính, vì vậy nó sẽ hoạt động rất nhanh).

+0

Hiển thị cho chúng tôi một số mã. [Bạn đã thử gì?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) – weltschmerz

+0

Tôi đã thêm một số suy nghĩ về cách nó có thể được triển khai. Nhưng tôi không thích những giải pháp đó. Đó là lý do tại sao đặt câu hỏi. – jizak

Trả lời

2

Có một số giải pháp không nhanh trong here.

Hoặc bạn có thể sử dụng sphinx với đá quý thinking sphinx. Bằng cách này, nó sẽ nhanh chóng và sạch sẽ.

ThinkingSphinx.search classes: [Posting, Shop::Items, Directory::Items], page: params[:page] || 1, per_page: 10 
0

Khi truy vấn sẽ được lưu vào bộ nhớ cache, chỉ việc sắp xếp sẽ mất thời gian. Nếu bạn không hiển thị quá nhiều mục, khả năng đọc của nhà phát triển vượt xa chi phí để tối ưu hóa mục này. Bạn luôn có thể làm tốt hơn nếu hiệu suất thực sự là một nút cổ chai, nhưng sau đó bạn vẫn có các lựa chọn thay thế để làm cho mã này quá phức tạp.

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