Dovete:
- elementi di query per ogni modello
- loro unione in un formato comune
- specie e limitare
Ecco il codice:
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)]
Naturalmente, a seconda delle vostre modelli, si dovrà cambiare il metodo utilizzato come "titolo" o "testo".
Ma se ti capita di aver bisogno di molti di questi idiomi, dovresti utilizzare l'ereditarietà di tabelle singole come facciamo in zena (un CMS di rotaie).
ho problemi con l'ordinamento, sembra raggruppare tutto Dopo aver ordinato in ordine, allora ha riunito tutti i pianeti in ordine invece di mischiarli. – Arcath
Usa #sort_by invece: activities.sort_by (&: created_at) .reverse [0, limit] –
grazie, deve essere '@ activites = activities .sort_by (&: date) .reverse [0, limit] 'using: date in modo che sia il campo nella classe Attività – Arcath