2011-10-20 29 views
7

Đây là lần theo dõi Creating "feeds" from multiple, different Rails models. Trong câu hỏi này, tadman cho thấy phương pháp này tạo ra một thức ăn sử dụng các mặt hàng gần đây từ ba mô hình (Ticket, Bưu, Báo cáo):Tạo một "nguồn cấp dữ liệu" từ nhiều mô hình đường ray, hiệu quả?

@items = [ Ticket, Post, Report ].inject([ ]) do |a, with_class| 
    a + with_class.find(:all, :limit => 10, :order => 'created_at DESC') 
end.sort_by(&:created_at).reverse[0, 10] 

Ông gợi ý này như một phương pháp mà sẽ làm việc, nhưng điều đó sẽ không nhất thiết phải là hiệu quả nhất. Ông đề xuất cũng như một phương pháp thay thế sẽ là "tạo ra một bảng chỉ mục có một liên kết đa hình với các bản ghi khác nhau."

Tôi thực sự quan tâm đến việc tìm hiểu thêm về giải pháp thay thế này, có vẻ như hiệu quả hơn và thanh lịch hơn. Bất cứ ai có thể cho tôi biết làm thế nào người ta sẽ làm điều này? Hãy sử dụng cùng một thông tin cơ bản từ câu hỏi cuối cùng làm cơ sở.

Trả lời

6

Những gì tôi đã làm một lần, có một Feed feed (feed_controller) riêng biệt và cập nhật nó trong after_save callbacks cho tất cả các mô hình interesting. Vì vậy, ví dụ: nếu bạn có Mô hình bài viết, có một cuộc gọi lại after_save:

def after_save 
    feed = Feed.new 
    feed[:model_name] = 'Article' 
    feed[:item_id] = id 
    feed.save 
end 

thì bạn có thể truy cập nguồn cấp dữ liệu tuyến tính giống như bất kỳ mô hình nào khác. Chi phí tính toán phát sinh khi lưu nguồn cấp dữ liệu, không đọc từ nguồn cấp dữ liệu.

Ồ, bạn cũng có thể có Feed has_many :article; has_many :user, has_many :status và cứ thế, sau đó :include tất cả các tài nguyên đó trong nguồn cấp dữ liệu và hiển thị chúng trong chế độ xem. Hy vọng điều này có ý nghĩa ;-)

+0

điều này có vẻ đầy hứa hẹn. cảm ơn! – jay

+0

Bất kỳ ý tưởng nào về cách đặt điều này vào bộ điều khiển và hiển thị nó trong chế độ xem? không chắc chắn ý của bạn là gì "sau đó: bao gồm tất cả các tài nguyên đó trong nguồn cấp dữ liệu"? – Terryfrancis

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