views:

45

answers:

2

Hello, all my fellow coders! I've got a problem ohh chok!.. :P Now my problem i that i'm trying to make a design for a bigger site, it's going good. Until i should make the content/news slider. It should take data from multiple tables and returning to the application.html.erb.

So it is take reviews and announcements just the latest 5 and order it after latest created. and then give it to me in the application.html.erb.. (Rails 3.0.0.beta4)

hope you guys understands me.

A: 

Take the latest 5 for all the models, then put all records on an array, sort the array and take the first 5 elements.

# consider moving .order('date desc').limit(5) to a named scope or a module
announcements = Announcement.order('date desc').limit(5)
posts = Post.order('date desc').limit(5)
monkeys = Monkey.order('date desc').limit(5)
# .. add others here

elements = (announcements + posts + monkeys).sort_by(&:date).reverse[1..5]

The variable elements will have the 5, if they exist.

Note: I'm assuming that all your models have a method called "date". You can change it to date_created or whatever.

You can put this code on several places, but I think the best one would be a "home" controller, created specifically for rendering the home page. The elements would be calculated on its show action.

egarcia
Hey thanks, but you didn't give me answer on my last part in the question, about where to put it? Wich controller. And no, i don't have a date method?
Oluf Nielsen
sure - a home controller is your best bet IMHO. Updated my answer.
egarcia
A: 

don't know if it's more performant to use this syntax, instead of the one from egarcia:

elements = (announcements | posts | monkeys).sort_by(&:date).reverse[1..5]

if you need to use this code in several pages (for example in sidebars), then the best way could be to write an helper (say: last_items)

apeacox