Bạn cần phải:
- yếu tố truy vấn cho từng mô hình
- hợp chúng trong một định dạng phổ biến
- sắp xếp và hạn chế
Dưới đây là một số mã:
class Activity < Struct.new(:title, :text, :date); end
limit = 10
activities = []
activities += Post.all(:order => 'created_at DESC', :limit => limit).map do |post|
Activity.new(post.title, post.summary, post.created_at)
end
activities += Planet.all(:order => 'published_at DESC', :limit => limit).map do |planet|
Activity.new(planet.title, planet.message, planet.published_at)
end
activities += Message.all(:conditions => ['receiver_id = ?', current_user.id], :order => 'created_at DESC', :limit => limit).map do |message|
Activity.new(message.title, message.text, message.created_at)
end
# descending sort by 'date' field
sorted_activities = activities.sort_by(&:date).reverse
# 10 most recent elements across all models
@activities = sorted_activities[0..(limit-1)]
Tất nhiên, tùy thuộc vào mô hình của bạn, bạn sẽ phải thay đổi phương pháp được sử dụng như "title" hoặc "văn bản".
Nhưng nếu bạn cần nhiều thành ngữ như vậy, bạn nên sử dụng Thừa kế bảng đơn như chúng tôi thực hiện trong zena (CMS đường ray).
im có vấn đề với việc phân loại, dường như gộp tất cả Các bài viết được chia theo thứ tự sau đó có tất cả các hành tinh cùng nhau để thay thế cho việc trộn chúng – Arcath
Sử dụng #sort_by thay vào đó: activities.sort_by (&: created_at) .reverse [0, limit] –
cảm ơn, nó cần phải là '@ activites = activity .sort_by (&: date) .reverse [0, limit] 'using: date để trường của nó trong lớp Activity – Arcath