Tôi muốn biết cách đặt hàng hiệu quả trong Rails. Chúng ta đều biết rằng bạn có thể đặt hàng đơn giản trong Rails với các phương pháp sau:Thứ tự tùy chỉnh, hiệu quả, phức tạp trong Rails 3
Model.order("created_at ASC").limit(10)
Trong trường hợp này, tôi chỉ cần kéo 10 mục đầu tiên. Nếu tôi muốn thêm một thứ tự không được mô tả theo thời gian, tôi có thể tạo một cột trong Model (ví dụ cột custom_ordering) và các giá trị đầu vào để sắp xếp các đối tượng. Trường hợp đó, bạn chỉ cần sửa đổi lệnh gọi ("custom_ordering ASC").
NHƯNG giả sử tôi muốn đặt hàng dựa trên tùy chọn được dự đoán của người dùng. Trong trường hợp này, không thể tạo cột mới vì mỗi người dùng có sở thích khác nhau. Điều gì sẽ là một cách thông minh, hiệu quả để hoàn thành nhiệm vụ này?
Một phương pháp sẽ là tạo một thuật toán để dự đoán đánh giá của người dùng đối tượng từ Mô hình được gọi là model_rating (đối tượng). Thuật toán này sẽ tạo ra một giá trị số nguyên dương của xếp hạng của chúng. Nếu tôi đi xuống con đường này, làm thế nào tôi có thể đặt hàng hiệu quả Mô hình?
Một phương pháp khác là đặt thuật toán thành người dùng model_entry.user_preference (người dùng). Sau đó, tôi có thể đặt hàng theo:
Model.all.sort! { |b, a| a.user_preference(user) <=> b.user_preference(user) }
Nhưng điều này đánh tôi là không hiệu quả. Nó phải gọi tất cả các mục trong mô hình và sau đó sắp xếp chúng, ngay cả khi bạn sử dụng các phương pháp phân loại hiệu quả như sắp xếp hợp nhất hoặc bong bóng, có hiệu suất kém trên các mô hình có số lượng lớn mục nhập.
Có các đường dẫn khác mà tôi không xem xét không? Có ai có thể chỉ cho tôi đi đúng hướng không?
có, những tùy chọn này có vẻ khả thi. Bạn có nghĩ rằng một trong những cách tiếp cận này sẽ là một trang web lớn như facebook đặt hàng một nguồn cấp tin tức không? Trong những trường hợp này, bạn có cả nhiều mục nhập bảng và nhiều người dùng. – jay
Trong trường hợp của Facebook, tôi nghĩ rằng họ lưu trữ một nguồn cấp tin tức riêng biệt cho mỗi người. Tôi không tin rằng "những câu chuyện" được chia sẻ giữa mọi người. Những câu chuyện này đang sử dụng tài nguyên được chia sẻ (Album, nhận xét, v.v ...)) nhưng mỗi câu chuyện trên dòng thời gian của bạn được xây dựng cho bạn. (Ít nhất, đó là cách tôi sẽ xây dựng nó) –
tốt, rất thú vị! luôn luôn khai sáng để thảo luận về công cụ này với những người khác! cảm ơn rất nhiều cho đầu vào của bạn – jay